0

我使用 b2ContactListener 类来识别碰撞。所有其他车身碰撞识别成功。如何找到与地面体的其他 b2body 碰撞?

4

1 回答 1

1

碰撞发生在 box2d 中的夹具之间,而不是物体之间。这就是为什么您的联系人侦听器中可能有一些代码看起来像

contact.fixtureA = contact->GetFixtureA();
contact.fixtureB = contact->GetFixtureB();

如果您使用精灵作为每个身体的用户数据,您仍然可以选择将任何您想要的内容放入夹具的用户数据字段中。这样的事情很有帮助:

fixtureUserData *fUd = new fixtureUserData();
fUd->tag = INT_IDENTIFYING_GROUND_FIXTURE;
// ...
b2FixtureDef groundBoxDef;
groundBoxDef.userData = fUd;

您在 .h 文件中定义的结构可能看起来像

struct fixtureUserData {
    int tag;
    // ...other properties
};

INT_IDENTIFYING_GROUND_FIXTURE 也可以是枚举类型的元素(每个碰撞类别可能有一个该类型的元素)。如果你已经这样做了,你可以通过做测试与地面的碰撞

fixtureUserData *fBUd = (fixtureUserData *)pdContact.fixtureB->GetUserData();
if (fBUd->tag == INT_IDENTIFYING_GROUND_FIXTURE){
    // react to collision
}
于 2012-07-30T12:04:10.040 回答