在box2d中检测身体的特定部位是否与另一个身体相撞

时间:2014-04-11 06:34:56

标签: android libgdx box2d collision-detection

请建议一些解释或代码,如何在box2d中使用libgdx检测一个身体的特定部位与另一个身体之间的碰撞。我能够使用Contact Listener检测两个身体之间的简单碰撞如上所述here但我也想检查哪些部分正在过度

谢谢,

1 个答案:

答案 0 :(得分:1)

ContactListener为您提供Contact作为回调参数。这些联系人会告诉您Fixtures确实通过contact.getFixtureA()contact.getFixtureB()发生了碰撞。

人们通常会发现他们的身体哪个部位发生碰撞,通过Fixtures来构建几个body.createFixture(...)

您可以使用FixtureBodyfixture.setUserData()以及body.setUserData()上设置用户数据。您可以将夹具保存在其他位置,然后通过contact.getFixtureA() == xxx.savedFixture进行比较。

这可能在您的实体中,例如以下内容:

public class Player {
    public Fixture arm;

    // create the player body and store the arm fixture
    body.setUserData(this);
    arm = body.createFixture(...);
}

之后您可以在联系人监听器中执行此操作:

public void beginContact(Contact contact) {
    if (contact.getFixtureA().getBody().getUserData().getClass().equals(Player.class)) {
        if (contact.getFixtureA() == ((Player)contact.getFixtureA().getBody().getUserData()).arm == contact.getFixtureA()) {
            // the arm collided with something
        }
    }
}

或者您可以添加一些用户数据,例如fixture.setUserData("arm"),然后您可以轻松检查这些数据。在您的联系人回调处理程序中。