循环顺序的碰撞检测问题



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

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

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

场景1:

  • 我有三个正方形对象;[玩家]、[enemy1]和[enemy2]
  • [enemy1]和[enemy2]在水平方向上彼此靠近,并且[player]在[enemy1]上方
  • 然后玩家开始以向下箭头+向右箭头的方式移动
  • 所以现在,[玩家]结束了[敌人1],[敌人2]向右移动
  • 因为要检查的第一个元素是[enemy1],所以碰撞系统会校正[玩家]的y位置,并且因为右侧不被视为碰撞,所以它可以向右移动
  • 结果:一切都很好。这位球员可以毫无问题地继续右路

场景2:

  • 我有三个正方形对象;玩家,enemy1和enemy2
  • [enemy1]和[enemy2]在水平方向上彼此靠近,并且[player]在[enemy2]上方
  • 然后玩家开始以向下箭头+向左箭头的方式移动
  • 所以现在,[玩家]已经结束[敌人2],[敌人1]向左走
  • 因为要检查的第一个元素是[enemy1],所以碰撞系统校正[玩家]的y位置、和x位置,当然,[enemy2]碰撞在这一点上并不重要
  • 结果:当然,[球员]被[恩米1]挡出,无法继续左路

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

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

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

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

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

我的对撞机管理员现在是这样工作的(3步(:

  • 查找重叠
  • 收集碰撞信息
  • 通过重叠区域(在信息中收集(对碰撞进行排序并重新计算

所以,现在的主要区别是,我首先分析所有的重叠/碰撞,然后我处理它们,在这种情况下,通过重叠区域进行排序

我希望这能帮助

最新更新