2013-08-26 43 views
0

嗨,大家好,我目前在這裏停止了一個應用程序的工作。問題是我有一個類創建了許多實例,每個實例都由一個CCPhysicsSprite和一個b2body組成。在與任何其他類別的任何其他對象發生碰撞時,該特定實例應該消失。現在我創建了一個確定聯繫人的聯繫人偵聽器,問題是我需要訪問特定實例才能銷燬它。充其量,我能夠訪問其CCPhysicsSprite及其標籤,但無法真正獲得該類的特定實例。我希望有人幫助我。確定給定其中一個變量的類的實例

+0

顯示一些代碼。通常,box2d主體的userData字段有一個指向CCPhysicsSprite實例的指針。所以如果你可以訪問CCPhysicsSprite對象,那麼這就是你正在尋找的實例。除非你正在尋找問題中沒有提到的第三堂課? – LearnCocos2D

回答

0

將實例作爲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主體。

相關問題