我填充了一系列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。我该如何解决这个问题?
答案 0 :(得分:0)
当你破坏一个物体时,你也必须将它从数组中移除,否则先前指向物体的指针将变成垃圾:
b2Body *removeLinkBody = (b2Body*) [[bodiesArray objectAtIndex:i] pointerValue];
bWorld->DestroyBody(removeLinkBody);
[bodiesArray removeObjectAtIndex:i];