物理主体编辑器加载器碰撞检测

时间:2015-10-06 11:50:12

标签: java android libgdx

在我的游戏中,我使用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);
    }
    }

0 个答案:

没有答案