我目前正在使用嵌套的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,依此类推。
我想不出任何办法来有效地完成这项工作。
答案 0 :(得分:1)
您的问题是当您搜索交叉点时,例如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();
答案 1 :(得分:0)
所以,我知道了。这很简单,我要做的就是在移动一次之后再休息一下。