Java 物理体编辑器装载机碰撞检测
在我的游戏中,我使用添加自定义形状到我的身体。在我的Java 物理体编辑器装载机碰撞检测,java,android,libgdx,Java,Android,Libgdx,在我的游戏中,我使用添加自定义形状到我的身体。在我的show() BodyDef jetskiDef = new BodyDef(); jetskiDef.position.set(new Vector2(2, WATER_HEIGHT)); jetskiDef.type = BodyDef.BodyType.DynamicBody; jetskiFixture = new FixtureDef(); jetskiFixture.density = 0.25f;
show()
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”,jetski夹具,1,jetski盒宽度,jetski盒高度)代码>我将自定义形状添加到夹具
我尝试在我的render()
方法中呈现JetKitTexture,如下所示:
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()
方法中,我检查其中一个固定装置是否是来自动态物体的固定装置,以及另一个是否是传感器,以便将它们添加到浮标控制器中以获得浮力效果
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);
}
}
如果我现在开始我的游戏,我可以看到自定义形状,但没有JetKitTexture,它也不会像预期的那样浮动。
我尝试更改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);
}
}
这可能有多个问题。比较两个具有==和非#等于的对象:userDataB==jetskiTexture。在主体的位置绘制精灵,这通常是一个坏主意,因为box2d世界不应该是像素完美的(对于良好的模拟来说是坏的)。你在相机的范围内画画吗?等您可以使用Box2DebuggerRenderer获得您的世界的调试视图。@PinkieSwirl感谢您的评论。我正在使用调试渲染器。我也能看到jetski的外形。如果没有“==”,我应该如何比较两个对象?使用object.equals(其他):因此这里:userDataA.equals(jetskiTexture),==比较对象的“指针”,但您肯定应该看看,因为这是java基础。除此之外,请提供所有信息,这不应该是我的猜测游戏。例如,您从不调用sprite.draw(…);我希望你能做到?请发布您的完整呈现/。。。方法,只需删除所有不重要的内容,并检查是否没有复制粘贴错误。