Установка позиции спрайта в многоугольнике box2D - PullRequest
0 голосов
/ 07 декабря 2018

Я пишу код игры и использую libGDX с библиотекой box2D.и у меня есть проблема.Как вы знаете, есть функция с CircleShape .setPosition () для позиционирования фигуры, я использую ее для установки спрайта в этой фигуре, как вы можете видеть на рисунке ниже:

picture1

Вот где я создаю эту форму, как вы можете видеть, есть функция "setPosition", чтобы соответствовать форме в соответствии с моим спрайтом:

    CircleShape ballShape = new CircleShape();
    ballShape.setPosition(new Vector2(-1.5f, 0f)); //Here i set the position 
                                              //of the shape
    ballShape.setRadius(1.5f);

    // fixture definition
    fixtureDef.shape = ballShape;
    fixtureDef.density = 0f; 
    fixtureDef.friction = 0; 
    fixtureDef.restitution = 0; 
    playerCircle = world.createBody(bodyDef); 
    playerCircle.createFixture(fixtureDef);
    ballShape.dispose();

Здесь я рисуюмой спрайт в соответствии с CircleShape:

        batch.begin();
        boxSprite = new Sprite(new Texture(
                "C:/Users/HOME/Desktop/videoGameGit/videogameGit/box2DExample-android/assets/data/sprites/player/ak47stand.png"));
        boxSprite.setSize(5.5f, 5.5f);
        boxSprite.setOrigin(boxSprite.getWidth() / 2, boxSprite.getHeight() / 2);
        playerCircle.setUserData(boxSprite);
        world.getBodies(tmpBodies);
        for (Body body : tmpBodies)

            if (body.getUserData() != null && body.getUserData() instanceof Sprite) {

                Sprite sprite = (Sprite) body.getUserData();
                sprite.setPosition((body.getPosition().x - sprite.getWidth() / 2),
                        (body.getPosition().y - sprite.getHeight() / 2));
                sprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees);
                sprite.draw(batch);
            }
        batch.end();

В этот момент все работает нормально, но когда я хочу нарисовать объект с помощью polygonShape .setAsBox, нет функции .setPosition, которую можно использовать.

И это проблема для меня, потому что я должен установить положение фигуры в соответствии со спрайтом, как вы можете видеть на этой другой картинке.Спрайт неправильно позиционируется:

picture2

Поскольку в PolygonShape нет функции наподобие setPosition, здесь часть моего кода, которую я создаю polygonShapeкак коробка:

        bodyDef.type = BodyType.DynamicBody;
        PolygonShape chair = new PolygonShape();
        chair.setAsBox(1.3f, 1.4f, new Vector2(x, y), 0);
        fixtureDef.shape = chair;
        fixtureDef.density = 10f;
        fixtureDef.friction = 10;
        fixtureDef.restitution = 0f;
        body = world.createBody(bodyDef);
        body.createFixture(fixtureDef);
        body.setAngularDamping(5);
        body.setLinearDamping(8);
        chair.dispose();

Вот я рисую это:

    batch.begin();
    sprite.setSize(5.5f, 5.5f);
    sprite.setOrigin(sprite.getWidth() / 2, sprite.getHeight() / 2);
    body.setUserData(sprite);
    world.getBodies(tmpBodies);
    for (Body body : tmpBodies)

        if (body.getUserData() != null && body.getUserData() instanceof Sprite) {

            Sprite sprite = (Sprite) body.getUserData();
            sprite.setPosition((body.getPosition().x - sprite.getWidth() / 2),
                    (body.getPosition().y - sprite.getHeight() / 2));
            sprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees);
            sprite.draw(batch);
        }
    batch.end();

Мой вопрос, есть ли способ правильно подобрать polygonShape со спрайтом?Я надеюсь, что кто-нибудь может мне помочь.

Спасибо!.

...