请建议一些解释或代码,如何在box2d中使用libgdx检测一个身体的特定部位与另一个身体之间的碰撞。我能够使用Contact Listener检测两个身体之间的简单碰撞如上所述here但我也想检查哪些部分正在过度。
谢谢,
答案 0 :(得分:1)
ContactListener
为您提供Contact
作为回调参数。这些联系人会告诉您Fixtures
确实通过contact.getFixtureA()
和contact.getFixtureB()
发生了碰撞。
人们通常会发现他们的身体哪个部位发生碰撞,通过Fixtures
来构建几个body.createFixture(...)
。
您可以使用Fixture
和Body
在fixture.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")
,然后您可以轻松检查这些数据。在您的联系人回调处理程序中。