在销毁一系列物体时发出SIGABRT信号

时间:2013-05-30 16:07:22

标签: cocos2d-iphone box2d physics box2d-iphone

我填充了一系列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。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

当你破坏一个物体时,你也必须将它从数组中移除,否则先前指向物体的指针将变成垃圾:

b2Body *removeLinkBody = (b2Body*) [[bodiesArray objectAtIndex:i] pointerValue];
bWorld->DestroyBody(removeLinkBody);
[bodiesArray removeObjectAtIndex:i];