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而另一个变量不是静态的,所以我不知道其他Circles 会如何影响它。奇怪的是,当它抛出这个异常时,索引总是3040。我该如何解决这个问题?

4

1 回答 1

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

这不会返回 if pIndexis正是path.length,这会导致异常。

数组索引只能达到数组长度减 1。

于 2013-01-27T03:01:25.050 回答