避免碰撞检测的O(n ^ 2)复杂度

Sad*_*ido 10 complexity-theory collision-detection

我正在开发一个简单的基于图块的2D游戏.我有一个级别,填充了可以与瓷砖互相交互的对象.检查与tilemap的碰撞是相当容易的,并且可以对具有线性复杂性的所有对象进行.但现在我必须检测对象之间的碰撞,现在我必须检查每个对象与其他所有对象,这会导致方形复杂性.

我想避免方形复杂性.是否有任何众所周知的方法来减少对象之间的冲突检测调用.是否存在任何数据结构(如BSP树),它们易于维护并允许一次拒绝许多冲突.

例如,关卡中的对象总数约为500,其中大约50个一次在屏幕上显示...

谢谢!

Pel*_*dao 9

为什么不让瓷砖存储有关哪些对象占据它们的信息.然后,只要将对象移动到新图块,就可以检测到碰撞,方法是查看该图块是否已包含其他对象.

这几乎不需要任何费用.

  • +1这是一个比使用四叉树更简单的解决方案. (2认同)

Mat*_*ský 5

您可以使用四叉树来划分空间并减少需要检查碰撞的对象数量。

请参阅这篇文章 - 四叉树演示。

也许还有这个 - 二维碰撞检测。

或者这个 - 四叉树(包含源代码)

乍一看,维护树可能需要大量 CPU 资源,但它也显着减少了检查数量(请参阅第一个链接中的演示)。