我做了一个小的射击game..It工作正常,但我也想实现,如果火相交,他们将消失。我有两个列表的球员子弹和电脑子弹...But如果我有更多的子弹从计算机或反向.Here我的循环
for (int i = 0; i < cb.size(); i++) {
for (int j = 0; j < b.size(); j++) {
if (b.get(j).rect.intersects(cb.get(i).rect)) {
cb.remove(i);
b.remove(j);
continue;
}
if (cb.get(i).rect.intersects(b.get(j).rect)) {
b.remove(j);
cb.remove(i);
continue;
}
}
}这是我的游戏,woking算法。http://rapidshare.com/files/364597095/ShooterGame.2.6.0.jar
发布于 2010-03-17 18:15:10
我强烈建议不要在循环内部使用for循环计数器,而使用。你现在很小心,以后就不小心了(“让我们在这里尝试一个hack来调试”),最后会有bug。
一种解决方案可能是:
thingsToRemovethingsToRemove并删除(或设置为“-1等) cb和<代码>D14列表中的相应元素
发布于 2010-03-17 18:08:48
正如卡尔的评论中所说,第二个if应该是多余的。
至于您的IndexOutOfBounds异常,这是由以下原因引起的:当计算机子弹击中玩家子弹时,您将两者都从列表中删除。然后使用continue继续将相同的计算机项目符号与其余的播放器项目符号进行比较。然而,那个计算机的子弹已经被移除了!因此,我建议你用break代替continue,然后检查下一个计算机的子弹是否与玩家的子弹相交。
正如罗曼在他的代码中暗示的那样,您应该进一步减少外部循环的计数器,因为您通过删除其中一个项目符号来减小列表大小。因此,在下一次迭代中,以前是项目符号#3的项目符号是以前是项目符号#4的内容。因此,在break之后,您不希望外部循环的计数器递增。
发布于 2010-03-17 17:54:33
避免逻辑错误的最简单的修改:
for (int i = 0; i < cb.size(); i++) {
for (int j = 0; j < b.size(); j++) {
if (b.get(j).rect.intersects(cb.get(i).rect)) {
cb.remove(i--);
b.remove(j--);
}
}
}https://stackoverflow.com/questions/2461228
复制相似问题