我正在研究基于3D平铺的游戏,我正在使用AABB碰撞检测。对于玩家交叉的每个立方体,我发现玩家与立方体相交的轴最小,并沿着该轴将玩家推出立方体。
根据检查多维数据集的顺序,这可能会导致沿多个多维数据集的边缘滑动时出现问题。我已经创建了一个应该解释问题的图表:
关于解决这个问题的最有效方法的任何想法可能是什么?或者更好的方法来处理碰撞响应?
谢谢。
答案 0 :(得分:4)
离散实现会强制您在系统中注入一些连续数学,仅在需要时(立方体/方向重叠)。
对于每个多维数据集 c1 , c2 ... ci ,用户多维数据集( uc )与之交叉在检查时,你想要找出哪个立方体首先被“触摸” - 只有一个,就像在现实生活中一样。考虑 uc 的方向d
,并在 ci (重叠)中获取 uc 的数量,找到 cu 当它“触及” ci 。
确定哪个多维数据集首先被“触摸” cj (d
轴上需要回滚最多的那个 - 越早越好)并且只使用这个来计算碰撞反应
您不仅可以达到准确性。但如果所有立方体都在移动,速度不同等等,它会有所帮助......
答案 1 :(得分:0)
从你的图表中,你似乎想要最小的移动,最小化玩家和立方体之间的重叠。每个具有重叠的立方体将尝试在两个正交方向上“推动”玩家。你可以做一些事情,比如在每个方向上选择最小推力的最小推力吗?
答案 2 :(得分:0)
当一行中的两个(或更多)静止立方体可以组合成一个更大的矩形时,您可以实现一种混合宽相。首先测试较大的矩形。它会为您提供绿色复选标记的结果,并且比检查每个立方体更快。然后,在此之后,仅在您需要时,检查各个立方体。
答案 3 :(得分:0)
碰撞只能在1轴上推动物体。确定要推动的轴:
java:/jaas/
如果您的图块已对齐,则此方法有效。
使用圆圈避免粘贴未对齐的图块