循环顺序的碰撞检测问题

问题描述 投票:0回答:1

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

对于碰撞的检测,我使用的是AABB。

可视化表示,供参考。https:/i.imgur.com7SaeUjX.png。

场景一

  • 我有三个 正方形 对象;[玩家]、[敌人1]和[敌人2]。
  • 敌方1]和[敌方2]在水平方向上相互靠近,且 [玩家]在[敌人1]之上.
  • 然后,玩家开始移动与 下箭头+右箭头 不断。
  • 所以现在,[玩家]在[敌人1]上方,[敌人2]向右走。
  • 因为第一个要检查的元素是【敌人1】,所以碰撞系统会修正【玩家】的y位置,因为右边不考虑碰撞,所以可以向右走。
  • 结果:一切正常。玩家]可以继续向右走,没有问题。

场景二

  • 我有三个 正方形 对象;玩家、敌人1和敌人2。
  • 敌方1]和[敌方2]在水平方向上相互靠近,且在 [玩家]在[敌人2]之上.
  • 然后,玩家开始移动与 下箭头+左箭头 不断。
  • 所以现在,[玩家]在[敌人2]上方,[敌人1]向左走。
  • 因为第一个要检查的元素是[敌人1],所以碰撞系统会修正y的位置。和X位置 的[玩家],当然,[敌方2]的碰撞在此时并不重要。
  • 结果:当然,[玩家]被[敌人1]挡住了,不能继续向左走。

解释一下我在方案2中遇到的问题。

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

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

为了避免这种情况,我应该怎么做?

javascript collision-detection game-engine
1个回答
0
投票

好吧,在寻找和思考解决方案后,我最终得到了这个。

我的对撞机管理器现在是这样工作的(三步):

  • 找到重叠的地方
  • 收集碰撞的信息
  • 按重叠区域(在信息中收集的)对碰撞进行排序,并进行解析。

所以,现在主要的区别是,我先分析所有的重叠碰撞,之后再进行处理,在这种情况下,按重叠区域进行排序。

希望能帮到你

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.