在我的游戏中,我使用Physics Body Editor为我的身体添加自定义形状。在我的show()
方法中,我使用follownig代码创建我的Jetski Body:
BodyDef jetskiDef = new BodyDef();
jetskiDef.position.set(new Vector2(2, WATER_HEIGHT));
jetskiDef.type = BodyDef.BodyType.DynamicBody;
jetskiFixture = new FixtureDef();
jetskiFixture.density = 0.25f;
jetskiFixture.friction = 0.5f;
jetskiFixture.restitution = 0.5f;
jetskiFixture.isSensor = false;
jetski = world.createBody(jetskiDef);
jetski.setUserData(jetskiTexture);
使用bodyEditorLoader.attachFixture(jetski, "jetski", jetskiFixture, 1, JETSKI_BOX_WIDTH, JETSKI_BOX_HEIGHT);
我将自定义形状添加到灯具中。
我尝试在我的render()
方法中渲染jetskiTexture,如下所示:
for (Body body : worldBodies) {
if (body.getUserData() instanceof Sprite) {
Sprite sprite = (Sprite) body.getUserData();
Vector2 position = body.getPosition();
sprite.setPosition(position.x, position.y);
sprite.setRotation(body.getAngle() * MathUtils.radiansToDegrees);
}
在我的beginContact()
方法中,我检查其中一个灯具是否来自动态机身,另一个是传感器,以便将它们添加到我的BuoyancyController中以获得浮力效果。
public void beginContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
if (fixtureA.isSensor()
&& fixtureB.getBody().getType() == BodyDef.BodyType.DynamicBody) {
buoyancyController.addFixture(fixtureB);
} else if (fixtureB.isSensor()
&& fixtureA.getBody().getType() == BodyDef.BodyType.DynamicBody) {
buoyancyController.addFixture(fixtureA);
}
}
如果我现在开始我的游戏,我可以看到自定义形状,但没有jetskiTexture,它也不会浮动,就像它应该的那样。
我尝试更改beginContact()
方法,但它也没有用。
public void beginContact(Contact contact) {
Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();
String userDataA = contact.getFixtureA().getUserData().toString();
String userDataB = contact.getFixtureB().getUserData().toString();
if (fixtureA.isSensor()
&& userDataB == jetskiTexture) {
buoyancyController.addFixture(fixtureB);
} else if (fixtureB.isSensor()
&& userDataA == jetskiTexture) {
buoyancyController.addFixture(fixtureA);
}
}