將實例作爲UserData傳入box2d主體。當碰撞發生時,您可以通過將用戶數據void指針轉換回正確類型來檢索實例,並相應地進行處理。
// C++ example
void SomeClass::BeginContact(b2Contact* contact)
{
b2Body* bA = contact->GetFixtureA()->GetBody();
b2Body* bB = contact->GetFixtureB()->GetBody();
b2MetaData* bAMeta = (b2MetaData*)bA->GetUserData();
b2MetaData* bBMeta = (b2MetaData*)bB->GetUserData();
delete bAMeta;
delete bBMeta;
}
如果實例是Objective-C實例,則可能必須使用__bridge轉換。 有關如何使用它的更多信息,你可以在這裏找到。 SO - ARC and bridged cast
請記住,刪除box2d的身體它自己必須在世界之外完成,所以它更好,如果你只是標記身體以某種方式刪除(一個標誌或可能將其添加到列表稱爲toBeRemoved),並且在該步驟結束後,您可以遍歷容器,移除box2d主體。
顯示一些代碼。通常,box2d主體的userData字段有一個指向CCPhysicsSprite實例的指針。所以如果你可以訪問CCPhysicsSprite對象,那麼這就是你正在尋找的實例。除非你正在尋找問題中沒有提到的第三堂課? – LearnCocos2D