Cocos2D + Box2D iPhone:如何识别b2body和地面碰撞?

时间:2012-07-21 18:14:15

标签: cocos2d-iphone box2d-iphone

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

1 个答案:

答案 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
}