2

LibGDX 附带了一个使用 MVC 模式的示例。

更新程序看起来像这样

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
    }
   }
}

现在它循环遍历敌人列表两次。我应该这样做吗?也许不是一个小列表,但我想添加很多列表,所以我应该合并它们吗?

干杯!

4

6 回答 6

5

迭代本身很便宜,不太可能成为任何性能问题的根源。然而,没有什么是可以保证的;如果您想了解程序的性能特征,请使用分析器。

于 2012-05-22T15:23:27.990 回答
2

被警告。在更新所有敌人时,他们都采取了新的立场。然后检查碰撞。如果您要循环执行:更新一个敌人并检查碰撞,您将检查一些敌人的过时位置。这可能无关紧要,也可能无关紧要。一个 java 注释将按顺序排列: // 首先更新所有敌人: ... // 现在我们可以为新位置: .

作为答案:开销是最小的。

于 2012-05-22T15:31:36.740 回答
2

从上面的代码可以看出,性能应该不错,因为您使用的循环是性能友好的:

for (Enemies enemy : enemies)
{
    //Do something here
}

据此。_

于 2012-05-22T15:37:23.130 回答
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

然而,第二个选项可能更清楚,因为每个循环都有一个特定的目标,并不是所有的东西都在同一个循环中混合在一起。

于 2012-05-22T15:24:13.547 回答
0

理论上,一旦代码被执行,编译器可能会将两个循环合并在一起,或者以更好的方式对其进行优化。有时事情并没有按照它们看起来组合在一起的方式完全执行。

于 2012-05-22T15:37:42.877 回答
0

合并循环会引入新的开销、意想不到的间隔......相反,对不同的方法使用相同的循环不会影响实践中的性能,它会让你的代码更清晰、更具可读性和可维护性。如果这些方法可以轻松处理使用每种方法捕获异常和其他自定义任务。

于 2012-05-22T15:44:42.680 回答