如何检查哪些对象与b2Contact冲突?

时间:2014-01-09 14:33:06

标签: box2d cocos2d-x collision

我想检查游戏中两个身体之间的分歧。我有两个不同的身体,一个光芒(角色)和一把钥匙。我想检查这两者之间的分歧。 我已经创建了一个扩展b2ContactListener的类,我已经覆盖了BeginContact方法,但我不知道从哪里开始:

void MyContactListener::BeginContact(b2Contact *contact)
{
    if(contact->GetFixtureA()->GetBody()->GetUserData())
    {
        ContactData C= { contact->GetFixtureA(), contact->GetFixtureB() };
        cocos2d::CCLog("asdf");
    }
}

我可以获取userdata,但我怎么知道userdata是用光线还是键还是完全不同的对象?

1 个答案:

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

请记住在销毁正文之前删除用户数据:)