0

私はプレイヤーのような「ヘビゲーム」を持っていますが、体が特定の長さに達したときにエンドテールピースを取り外すときにいくつかの問題が発生しています。今私はこれを持っています:

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シーンが初期化されたときの「ヘビ」の長さはi0に等しく、プレーヤーが移動すると、「テール」画像がシーンとtailと呼ばれるNSMutableArrayに追加さます。私はこれをデバッガーで取得します:

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

object配列からスプライトを削除する行を追加する前に、シーンからスプライトを削除するために使用する前に、それは正常に機能したため、これは私には意味がありません。

4

1 に答える 1

1

ブレークポイントを操作してコード内の適切な場所を特定する方法を学ぶ必要があります。明らかに、問題はあなたが思っている行ではないからです。

[__NSArrayM insertObject:atIndex: ]:境界を超えたインデックス4 [0 .. 2] '

基本的に、知っておくべきことがすべてわかります。3つのインデックス(0、1、2)しかない配列のインデックス4にオブジェクトを挿入しようとしています。したがって、removeObjectの呼び出しは、発生する例外の理由ではありませんが、後でObjectを挿入しようとしたときに発生するこの例外の原因です。

前の手順でインデックス3または4のオブジェクトを削除したが、有効なインデックスを更新しなかったため、インデックスが間違っていると思われます。

この種の問題を修正するには、XcodeのBreakpoints Navigator(cmd + 6)に移動し、[+]と[AddExceptionBreakpoint]の左側にある小さなボタンをクリックして[all]に設定することをお勧めします。コードを実行すると、例外が発生した場所にデバッガーがポップアップ表示されます。

于 2012-08-01T20:47:23.513 に答える