我使用 b2ContactListener 类来识别碰撞。所有其他车身碰撞识别成功。如何找到与地面体的其他 b2body 碰撞?
问问题
1592 次
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 回答