使用LibGDX是一个使用MVC模式的例子。
updater看起来像这样
List<Enemies> enemies = new List<Enemies>();
public void update() {
updateEnemies();
checkCollision();
}
void updateEnemies() {
for each enemy //Loop enemies list{
enemy.update();
}
}
void checkCollison(){
for each enemy//Loop enemies list{
if(enemy.overlaps(hero.bounds) {
//Do stuff
}
}
}
现在它两次循环通过enemeies列表。我应该这样做吗?也许不是一个小清单,但我想添加大量的清单,所以我应该合并它们吗?
干杯!
答案 0 :(得分:5)
迭代本身很便宜,不太可能成为任何性能问题的根源。但是,没有任何保证;如果您想了解程序的性能特征,请使用分析器。
答案 1 :(得分:2)
警告。在更新所有敌人时,他们都会占据新位置。然后检查碰撞。如果你要循环:更新一个敌人并检查碰撞,你会检查一些敌人的过时位置。这可能是无关紧要的。 java评论将按顺序排列://首先更新所有敌人:... //现在我们可以为新职位:。
作为答案:开销很小。
答案 2 :(得分:2)
答案 3 :(得分:0)
这样做的:
for each element in collection
operationA();
operationB();
end for
与基本相同的时间:
for each element in collection
operationA();
end for
for each element in collection
operationB();
end for
然而,第二个选项可能更清晰,因为每个循环都有一个特定的目标,而不是所有东西都在同一个循环中混合。
答案 4 :(得分:0)
理论上,一旦执行代码,编译器可能会将两个循环合并在一起,或者以更好的方式对其进行优化。有时事情并没有像他们看起来那样被完全执行。
答案 5 :(得分:0)
合并循环将引入新的开销,意外的间隔......相反,对于不同的方法使用相同的循环不会影响实践中的性能,它会使代码保持清晰,可读性和可维护性。如果使用这些方法,可以轻松处理每种方法捕获异常和其他自定义任务。