0

我已经填充了一组 b2bodys。使用以下方法:

-(void)populateBodiesToDestroy:(b2Body*)body   {

NSValue *bodyValue = [NSValue valueWithPointer:body];
[bodiesArray addObject:bodyValue];

}

每个主体相互连接以形成链。使用上述方法,我已经填充了数组。我在 HelloWorldLayer 中每 1/60 秒更新一次 Sprite 类中的以下方法,以销毁身体并移除它们的 CCPhysicsSprites。

-(void)updateBodies    {
if (bodiesArray) {
        for (int i = 0; i < bodiesArray.count; i++) {
            b2Body *removeLinkBody = (b2Body*) [[bodiesArray objectAtIndex:i] pointerValue];
            bWorld->DestroyBody(removeLinkBody); //signal SIGABRT happens here
            removeLinkBody = NULL;
            [self removeChildByTag:10 + i];
         }
    }
} 

我不断收到信号 SIGABRT 在线:

bWorld->DestroyBody(removeLinkBody); //signal SIGABRT happens here

链条也冻结了。我不确定是全部还是部分身体都被摧毁了,只是出现了 CCPhyscisSprites。我该如何解决这个问题?

4

1 回答 1

0

当你销毁一个 body 时,你还必须将它从数组中删除,否则之前指向 body 的指针将变成垃圾:

b2Body *removeLinkBody = (b2Body*) [[bodiesArray objectAtIndex:i] pointerValue];
bWorld->DestroyBody(removeLinkBody);
[bodiesArray removeObjectAtIndex:i];
于 2013-05-30T19:49:30.983 回答