我想检查游戏中两个身体之间的分歧。我有两个不同的身体,一个光芒(角色)和一把钥匙。我想检查这两者之间的分歧。 我已经创建了一个扩展b2ContactListener的类,我已经覆盖了BeginContact方法,但我不知道从哪里开始:
void MyContactListener::BeginContact(b2Contact *contact)
{
if(contact->GetFixtureA()->GetBody()->GetUserData())
{
ContactData C= { contact->GetFixtureA(), contact->GetFixtureB() };
cocos2d::CCLog("asdf");
}
}
我可以获取userdata,但我怎么知道userdata是用光线还是键还是完全不同的对象?
答案 0 :(得分:2)
这个想法是,您将在用户数据中存储必要的信息。典型案例可能是:
struct bodyUserData {
int bodyType;
... whatever other stuff you need ...
};
创建正文时,您将创建用户数据以将信息附加到其中:
b2Body* body = world->CreateBody(...);
bodyUserData* bud = new bodyUserData;
bud->bodyType = BT_RAYMAN; // some integer to signify what the body is
body->SetUserData( bud );
在联系人监听器中,您可以检查正文的类型:
b2Body* body = contact->GetFixtureA()->GetBody();
bodyUserData* bud = (bodyUserData*)body->GetUserData();
if ( bud ) {
if ( bud->bodyType == BT_RAYMAN )
... body is rayman ...
else if ( bud->bodyType == BT_KEY )
... body is a key ...
}
请记住在销毁正文之前删除用户数据:)