【问题标题】:Detecting Collisions Between Dynamic Objects in a 2D Environment在 2D 环境中检测动态对象之间的碰撞
【发布时间】:2012-09-13 04:51:47
【问题描述】:

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

我看过四叉树,但它似乎检测动态移动对象之间的碰撞,我必须每帧重新创建四叉树(因为对象每帧都会改变它们的位置)。这看起来像一个昂贵的操作。

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

【问题讨论】:

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


    【解决方案1】:

    通常,您更新四叉树(而不是丢弃旧四叉树并构建新四叉树),这并不像您想象的那么昂贵:通常物体在每个四叉树中只移动一小段距离框架,因此大多数都保留在四叉树的同一节点中,并且几乎没有变化。即使在最坏的情况下,每个项目都移动到一个主要边界并且必须移除并重新插入,成本也只有 O(n log n)。但是或多或少地,对所有项目的任何循环都会花费这么多,所以再循环一次并不是什么大不了的事。

    【讨论】:

    • 如果四边形中的所有粒子都慢于下限,您可以在 2 或 3 帧后更新该四边形。如果是全停,即使5帧更新也不错。当某物进入该四边形时,这当然会将布尔值 updateQuad 设置为 true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多