2014-03-25 60 views
0

請幫助我,我試圖刪除世界b2Body但得到斷言錯誤的 「斷言失敗:(m_world-> IsLocked()== FALSE)」在下面的代碼:什麼是從世界中刪除身體的正確方法?

-(void)beginContact:(b2Contact *)contact{ 
for (int i=0; i<10; i++) { 
    b2Body *bodyA=contact->GetFixtureA()->GetBody(); 
    b2Body *bodyB=contact->GetFixtureB()->GetBody(); 
    if((bodyA&&bodyA==monsterBody[i])||(bodyB&&bodyB==monsterBody[i])) 
    { [self removeChild:(CCSprite*)monsterBody[i]->GetUserData() cleanup:YES]; 
     NSLog(@"%d",_world->IsLocked()); 
     _world->DestroyBody(monsterBody[i]); 
     break;} 
}} 
+1

你不能摧毀屍體在聯繫回調方法中 - 將它們添加到數組中並在下次調用中銷燬它們以更新: – LearnCocos2D

+0

感謝您的善意幫助。 –

回答

0

聯繫監聽器回調方法在世界步進時間內(內)執行。所以在這個時候刪除一個主體會導致Assertion失敗的錯誤。

你可以做的是在body的用戶數據中設置一個像isOkToDelete這樣的布爾值。然後在beginContact()回調中,只需將布爾更新爲yes。然後你可以在step之外進行刪除,就像cocos2d渲染正文的精靈之後的update()內部的tick一樣,或者你可以將正文插入到數組中並稍後刪除等。

相關問題