【发布时间】:2014-04-11 06:34:55
【问题描述】:
请就我如何在 box2d 中使用 libgdx 检测 一个身体的特定部分与另一个身体的特定部分之间的碰撞提出一些解释或代码。我能够使用 Contact Listener 检测两个身体之间的简单碰撞正如提到的here但我还想检查身体的哪些部分重叠。
谢谢,
【问题讨论】:
标签: android libgdx box2d collision-detection
请就我如何在 box2d 中使用 libgdx 检测 一个身体的特定部分与另一个身体的特定部分之间的碰撞提出一些解释或代码。我能够使用 Contact Listener 检测两个身体之间的简单碰撞正如提到的here但我还想检查身体的哪些部分重叠。
谢谢,
【问题讨论】:
标签: android libgdx box2d collision-detection
ContactListener 为您提供Contact 作为回调参数。这些联系人会通过contact.getFixtureA() 和contact.getFixtureB() 告诉您哪个Fixtures 确实发生了冲突。
人们通常会通过body.createFixture(...)用几个Fixtures来找出他们身体的哪个部位发生了碰撞。
您可以使用fixture.setUserData() 和body.setUserData() 在Fixture 和Body 上设置用户数据。您可以将您的灯具保存在其他地方并通过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"),然后您可以轻松检查这些数据。在您的联系人回调处理程序中。
【讨论】:
Object。这是你想要的。您可以将您的固定装置作为字段保存在实体中的某个位置。