我在我的C++游戏中遇到了碰撞检测问题。我最初尝试使用AABB检测,成功地检测到了碰撞,但问题是我想能够相互推动,所以我采用了一个基本的解决方案,将两个物体都向后推动穿透距离的一半。但这只把物体推向了彼此成45度角的方向。链接到GIF解释
于是,我认为我需要一个推动物体的方向,所以我尝试修改了一些来自教程的代码。该方向是两个物体中心之间的归一化向量。然后将碰撞深度的一半乘以归一化向量,以使它们相互推开。这有效,但它使用了圆形碰撞(它使用半径+半径来计算碰撞深度),这意味着我不能使用不同宽度和高度的矩形,例如32x64 48x32(我必须使用32x32、48x48、64x64等等)。这是一个大问题,因为我需要能够使用不同宽度和高度的纹理
所以我又回到了AABB,并让它能够工作,而不能互相推动,所以你就会完全停止。但这里的问题是,当我在一个轴上发生碰撞时,我不能在另一个轴上移动。例如,如果我同时按下向上和向左键,在左侧的墙上发生碰撞时,我会完全停止,而不是继续向上走,那里没有墙。
所以我需要帮助的是 要么使用AABB碰撞,使物体能够正确方向上相互推动穿透距离的一半,要么只是纯粹的AABB,你可以在与一个轴碰撞时完全停止,而在非碰撞的轴上可以行走,例如同时按下向上和向下将导致这个结果