检测2D环境中动态对象之间的碰撞

时间:2012-09-13 04:51:48

标签: data-structures 2d collision-detection quadtree

假设我们在二维世界中有很多动态对象,例如角色,射弹,能量提升,你在游戏中常见的东西。所有这些都在移动。我们想要检测它们之间的碰撞。有什么好办法吗?

我看过四叉树,但似乎要检测动态移动物体之间的碰撞,我必须每帧重新创建四叉树(因为物体会随着每一帧改变它们的位置)。这看起来很昂贵。

除了四叉树之外,还有其他方法解决这个问题吗?有没有办法改进四叉树方法?也许在每一帧上重新创建树都不是那么昂贵?

1 个答案:

答案 0 :(得分:1)

通常,你更新四叉树(而不是抛弃旧的四叉树并建造一个新的),这并不像你想象的那么昂贵:通常物体在每个物体中只移动一小段距离框架,以便大多数保留在四叉树的同一节点中,并且几乎没有变化。即使在最坏的情况下,每个项目都跨越主要边界并且必须被移除并重新插入,成本仅为O( n log n )。但是或多或少的所有项目的循环将花费这么多,所以再多一个循环并不是一件大事。