2014-03-25 57 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一样,或者你可以将正文插入到数组中并稍后删除等。

相关问题