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(…);我希望你能做到?请发布您的完整呈现/。。。方法,只需删除所有不重要的内容,并检查是否没有复制粘贴错误。