1

画面にたくさんの敵が出てくるゲームを作っています。これまでのコードの一部を次に示します。

private boolean update() {
    pIndex += cSpd;
    if (pIndex > path.length) return true;
    cX = path[pIndex].x;
    cY = path[pIndex].y;
    return false;
}

問題は、画面上に敵/オブジェクトが多すぎる場合、例外がスローされることです。(「多すぎる」の正確な量はわかりませんが、この量よりも多くする必要があることは間違いありません。) 例外は次のとおりです。

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 3040
    at Game$GamePanel$Circle.update(Game.java:152)
    at Game$GamePanel$Circle.access$1(Game.java:149)
    at Game$GamePanel.paintComponent(Game.java:110)
    at javax.swing.JComponent.paint(Unknown Source)
    at javax.swing.JComponent.paintToOffscreen(Unknown Source)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
    ...

私はそれが何を意味するかを理解しています。152 行目は次のとおりです。

cX = path[pIndex].x;

ただし、その直前の行は次のとおりであるため、これは混乱を招きます。

if (pIndex > path.length) return true;

なぜこれが起こっているのかわかりません。pIndex他の変数は静的ではないため、他の変数がどのように影響するかはわかりませんCircle。奇妙なことに、この例外がスローされるとき、インデックスは常に3040 です。この問題を解決するにはどうすればよいですか?

4

1 に答える 1

3
if (pIndex > path.length) return true;

pIndexそれは正確に である場合は返されないためpath.length、例外が発生します。

配列インデックスは、array-length から 1 を引いた値までしか指定できません。

于 2013-01-27T03:01:25.050 に答える