这就是我目前检查瓷砖地图的碰撞的方式:
int[,] layer;
for (x = 0; ...)
{
for (y = 0; ...)
{
//Do collision checks here, based on index.
}
}
这是我想到的另一种选择:
List<Collision> collisions;
for (i = 0; i < collisions.Count; i++)
{
//Check for "MovingObject to Collision" here.
}
我认为,因为我从两个for
循环切换到一个循环,所以会更快。
for
循环进行迭代是否重要? foreach
循环中迭代的内容是否重要? 答案 0 :(得分:1)
两个循环将(几乎)同时进行。假设循环内的计算需要大多数CPU周期(在你的情况下进行碰撞检查),循环本身的循环(增量x,y)可以忽略不计。
在for(x)/for(y)
考试中,计算执行Length(x) * Length(y)
次。在for(collisions)
中,您必须检查相同次数的冲突。如果你试图测试两个循环的性能,那么很难看出有什么不同。
第二种方法将允许更多优雅:
foreach(var collision in collisions) ...
循环次数(几乎)与for(i)
循环相同。 (不可测量的差异......)
通常,让它更快的技巧是算法的变化:
这可能会将你的算法从O(n ^ 2)改为O(n)甚至O(log n),这使得它真的更多更快。