滑动AABB碰撞 - 卡在边缘上

时间:2010-10-10 22:31:22

标签: algorithm geometry collision game-physics

我正在研究基于3D平铺的游戏,我正在使用AABB碰撞检测。对于玩家交叉的每个立方体,我发现玩家与立方体相交的轴最小,并沿着该轴将玩家推出立方体。

根据检查多维数据集的顺序,这可能会导致沿多个多维数据集的边缘滑动时出现问题。我已经创建了一个应该解释问题的图表:

http://imgur.com/mmK0W.png

  • 箭头#1是玩家的尝试移动。其他箭头是碰撞响应。
  • 在左图中,首先针对正确的立方体测试碰撞,使玩家向左推,然后向上推。 (的
  • 在右图中,首先对左侧立方体进行碰撞测试,使玩家向上推,此时玩家不再与另一个立方体相交。 (的

关于解决这个问题的最有效方法的任何想法可能是什么?或者更好的方法来处理碰撞响应?

谢谢。

4 个答案:

答案 0 :(得分:4)

离散实现会强制您在系统中注入一些连续数学,仅在需要时(立方体/方向重叠)。

对于每个多维数据集 c1 c2 ... ci ,用户多维数据集( uc )与之交叉在检查时,你想要找出哪个立方体首先被“触摸” - 只有一个,就像在现实生活中一样。考虑 uc 的方向d,并在 ci (重叠)中获取 uc 的数量,找到 cu 当它“触及” ci

确定哪个多维数据集首先被“触摸” cj d轴上需要回滚最多的那个 - 越早越好)并且只使用这个来计算碰撞反应

您不仅可以达到准确性。但如果所有立方体都在移动,速度不同等等,它会有所帮助......

答案 1 :(得分:0)

从你的图表中,你似乎想要最小的移动,最小化玩家和立方体之间的重叠。每个具有重叠的立方体将尝试在两个正交方向上“推动”玩家。你可以做一些事情,比如在每个方向上选择最小推力的最小推力吗?

答案 2 :(得分:0)

当一行中的两个(或更多)静止立方体可以组合成一个更大的矩形时,您可以实现一种混合宽相。首先测试较大的矩形。它会为您提供绿色复选标记的结果,并且比检查每个立方体更快。然后,在此之后,仅在您需要时,检查各个立方体。

答案 3 :(得分:0)

碰撞只能在1轴上推动物体。确定要推动的轴:

java:/jaas/

如果您的图块已对齐,则此方法有效。

使用圆圈避免粘贴未对齐的图块