如何使嵌套的for循环不会增加for循环中操作的频率



我目前正在使用嵌套for循环来查看两个矩形是否相交。

for(int i = 0; i < enemies.size(); i++) {
for(int j = 0; j < enemies.size(); j++) {
if(!enemies.get(i).pureHitbox.intersects(enemies.get(j).pureHitbox) && i != j) {
enemies.get(i).action();
}
}
}

问题是,对象执行的操作的频率会增加ArrayList中对象的数量。当前操作是在任何方向上移动3,但如果ArrayList中有2个,它将移动6,如果有3个,它会移动9,等等。

我想不出任何方法能有效地完成这项工作。

您的问题是,当您搜索交叉点时,例如A和B有交叉点,您会执行两次操作(A与B相交,B与A交叉(。您所需要的只是检查给定的动作是否针对给定的A和B执行。

for(int i = 0, total = enemies.size(); i < total - 1; i++)
for(int j = i + 1; j < total; j++)
if(!enemies.get(i).pureHitbox.intersects(enemies.get(j).pureHitbox))
enemies.get(i).action();

所以,我想明白了。这很简单,我所要做的就是在它移动一次后增加一个休息时间。

最新更新