2014-01-09 53 views
1

我想檢查我遊戲中兩個身體之間的分裂。我有兩個不同的身體,射手(人物)和鑰匙。我想檢查這兩者之間的分裂。 我已經擴展b2ContactListener一類,我已經覆蓋了BeginContact方法,但我不知道從哪裏何去何從:如何檢查哪些物件與b2Contact碰撞?

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

我能得到的用戶數據,但我怎麼知道,如果userdata是rayman還是key或完全不同的對象?

回答

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

記住破壞人體:)

+0

感謝那些幫助我人之前刪除用戶數據已經。我應該如何刪除用戶數據?我用'world-> DestroyBody(b)'銷燬了這個主體;'並用'data-> sprite-> removeFromParentAndCleanup(true);'從我的userdata中移除了這個精靈。我可以使用'刪除芽'來擺脫用戶數據嗎? – Aelion

+0

是的,沒錯。 – iforce2d