从世界上移除尸体的正确方法是什么?

时间:2014-03-25 12:46:08

标签: cocos2d-iphone box2d

请帮助我,我试图从世界中移除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 个答案:

答案 0 :(得分:0)

联系人侦听器回调方法在世界步骤期间(内)执行。因此,此时删除正文将导致断言失败错误。

你可以做的是在正文的用户数据中设置像isOkToDelete这样的bool。然后在beginContact()回调内部将bool更新为yes。然后你可以在step方法之外删除,就像在cocos2d呈现正文的精灵之后更新()内部,或者你可以将正文插入数组并稍后删除等。