我使用b2ContactListener类来识别碰撞。所有其他身体碰撞识别都是成功的。如何找到其他b2body与地体碰撞?
答案 0 :(得分:1)
碰撞发生在灯具之间的box2d,而不是机身。这就是为什么你的联系人监听器中可能有一些看起来像
的代码contact.fixtureA = contact->GetFixtureA();
contact.fixtureB = contact->GetFixtureB();
如果您使用精灵作为每个物体的用户数据,您仍然可以选择将任何您想要的东西放入灯具的userdata字段中。这样的事情非常有用:
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
}