循环顺序的碰撞检测问题

Collision Detection problem with loop order

我遇到的问题不是碰撞检测本身,而是检查顺序循环。

为了检测碰撞,我使用了 AABB。

视觉表示供参考: https://i.imgur.com/7SaeUjX.png

场景 1:

场景 2:

我在场景 2 中遇到的问题的解释:

问题出在碰撞的检查顺序上。循环开始检查玩家是否直接与 [enemy1] 发生碰撞,因为它是第一个被检查的,因此 [player] 当然会检测到与 [enemy1] 发生碰撞并解决 2 次碰撞,结果不佳。

如果你改变列表的顺序,从[enemy2]开始,当然问题反过来了。

我应该怎么做才能避免这种情况?

好的,在寻找和思考解决方案之后,我得到了这个:

我的对撞机管理器现在以这种方式工作(3 个步骤):

  • 找到重叠
  • 收集碰撞信息
  • 按重叠区域(在信息中收集)和 resolutes 对碰撞进行排序

所以,现在的主要区别是,我首先分析所有 overlaps/collisions,然后处理它们,在这种情况下按重叠区域排序

希望对你有所帮助