【发布时间】:2014-11-10 18:17:14
【问题描述】:
在我的游戏中,ObjectManager 类管理我游戏的所有对象,它有一个对象列表。
当我检查每个对象的碰撞时,我使用 2 for 语句。
for(int i = 0; i < objectnum; ++i )
{
for(int j = 0; j < objectnum; ++j)
{
AABB_CollisionCheck()
}
}
但如果游戏中有很多物体,FPS 会变低。 (80 个对象 == 40 帧) 也许这是因为我的碰撞检查方法效率低下。 (如果对象 num 是 n ,那么我的方法运行 n^2 次)
- 您能给我一些有关此碰撞检查优化的提示吗?
我想减少我的 for 循环来检查每个对象碰撞。
- 使用或不使用回调函数有什么不同?用于碰撞检查。 Callback 有什么运行速度的冒险吗?
附言
非常感谢您阅读我的问题。请原谅我的英语水平......
【问题讨论】:
-
如果您已经检查过A是否与B发生冲突,则不必检查B是否与A发生冲突。
-
最明显的改进是从
i + 1运行第二个循环。在那之后,您可能想查看碰撞代码,如果没有帮助,请查看一些空间分区方案。分析器是一个很好的帮助。 -
@Blutkoete,我也建议这样的代码:
for (int i = 0; i < objectnum - 1; ++i) for (int j = i + 1; j < objectnum; ++j)
标签: c++