【发布时间】:2013-11-24 04:14:22
【问题描述】:
所以我正在制作一个僵尸模拟游戏。我所拥有的是一群玩家和僵尸在这一点上随机跑来跑去。当幸存者与僵尸相撞时,我希望它移除幸存者并用僵尸替换它,基本上将他变成僵尸。
碰撞检测工作正常(我只是使用带有 intersect 方法的 awt 矩形)。但是我有一个僵尸数组列表和一个幸存者数组列表。当发生碰撞时,我将僵尸添加到僵尸列表中。然后我从该列表中删除幸存者。它工作了几次,然后随机抛出一个索引越界异常。
java.lang.IndexOutOfBoundsException: Index: 13, Size: 13
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.remove(Unknown Source)
at com.caveragestudios.zombiesim.World.update(World.java:53)
at com.caveragestudios.zombiesim.Main.update(Main.java:93)
at com.caveragestudios.zombiesim.Main.run(Main.java:69)
at java.lang.Thread.run(Unknown Source)
我尝试过使用高级 for 循环、常规 for 循环和带有 while 循环的迭代器。似乎没有任何工作。这是我现在的代码。
for (int i = 0; i < survivors.size(); i++) {
Survivor s = survivors.get(i);
for (int ii = 0; ii < zombies.size(); ii++) {
Zombie z = zombies.get(ii);
if (z.bounds.intersects(s.bounds)) {
zombies.add(new Zombie(s.position, this));
survivors.remove(i);
}
}
}
其他一切似乎都正常工作,只是当我尝试修改列表时它有点混乱并引发索引超出范围异常。有什么想法吗?
【问题讨论】: