Я пишу код игры и использую 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 со спрайтом?Я надеюсь, что кто-нибудь может мне помочь.
Спасибо!.