我正在制作一个游戏,屏幕上会有很多敌人。以下是目前代码的一部分:
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。我该如何解决这个问题?
答案 0 :(得分:3)
if (pIndex > path.length) return true;
如果pIndex
正好是path.length
,则不会返回,这会导致异常。
数组索引只能达到数组长度减去1。