Cocos2d iphone Cocos2D+;Box2D iPhone:如何识别B2B车身和地面车身碰撞?

Cocos2d iphone Cocos2D+;Box2D iPhone:如何识别B2B车身和地面车身碰撞?,cocos2d-iphone,box2d-iphone,Cocos2d Iphone,Box2d Iphone,我使用b2ContactListener类来识别冲突。所有其他车身碰撞识别均成功。我如何找到与地面碰撞的其他物体 碰撞发生在box2d中的装置之间,而不是实体之间。这就是为什么在联系人侦听器中可能有一些代码 contact.fixtureA = contact->GetFixtureA(); contact.fixtureB = contact->GetFixtureB(); 如果您使用精灵作为每个实体的用户数据,您仍然可以选择将任何您想要的内容放入装置的userdata字段中。类

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

碰撞发生在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_identification_GROUND_FIXTURE也可以是枚举类型的元素(每个碰撞类别可能有一个该类型的元素)。如果您已经这样做了,那么您可以通过执行以下操作来测试与地面的碰撞

fixtureUserData *fBUd = (fixtureUserData *)pdContact.fixtureB->GetUserData();
if (fBUd->tag == INT_IDENTIFYING_GROUND_FIXTURE){
    // react to collision
}

不知道你到底在问什么。如果你已经让其他碰撞检测工作,你在地面->身体上有什么问题?@Emmett,是的,你是对的,但问题是在其他身体上,我们使用sprite作为用户数据,我们可以很容易地用sprite标签识别身体类型。现在我用GroundBody->SetUserData(@“GroundBody”)来识别。哦,我明白了-你可能想用fixture userdata来识别。我将添加一个answer@Emmett,地体只是边缘表面..所以不需要夹具对吗?@Emmett,GroundBody->SetUserData(@“地体”)也做同样的事情…我们需要检查的是您的fixtureUserData或NSString…但是您的fixtureUserData需要分配新的。所以我使用了NSString本身。无论如何,谢谢你的回答。