从数组中删除精灵

时间:2012-08-01 20:13:21

标签: objective-c cocos2d-iphone nsmutablearray sprite

我有一个像玩家一样的“蛇游戏”,当身体达到一定长度时,我在移除尾部尾部时会遇到一些问题。现在我有这个:

if (i > maxHealth) {
    id object = [tail objectAtIndex:i-maxHealth-1];
    [tail removeObject:object];//This part doesn't work, if I comment this line out it works but the object is still in the array 
    [self.tileMap removeChild:object cleanup:YES];
}

i是“蛇”的长度时,当场景为初始值i等于0并且玩家移动时,它将“尾部”图像添加到场景和被调用的NSMutableArray 。我在调试器中得到了这个:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM insertObject:atIndex:]: index 4 beyond bounds [0 .. 2]'

这对我没有任何意义,因为在我添加行以从数组中删除精灵之前,只需使用object从场景中删除精灵就可以了。

1 个答案:

答案 0 :(得分:1)

您应该学习如何使用断点来识别代码中的正确位置,因为很明显,您的问题不是您认为的问题:

  

[__ NSArrayM insertObject:atIndex:]:索引4超出界限[0 .. 2]'

它基本上告诉你所有知道:你试图在一个只有三个索引(0,1,2)的数组的索引4处插入一个对象。 因此,您对 removeObject 的调用不是您获得异常的原因,但是当您尝试插入对象时,会发生此异常的原因。

我认为索引显然是错误的,因为您在之前的步骤中删除了索引3或4处的对象,但没有更新有效索引。

为了解决这些问题,我建议转到Xcode中的断点导航器(cmd + 6)并点击左边的小bottem" +"和"添加例外断点"设置为" all"。运行代码,调试器将在异常发生的地方弹出。

相关问题