我正在使用C ++和SDL开发一个小型2D平台游戏/格斗游戏,并且在碰撞检测方面遇到了很多麻烦。
这些关卡由一组拼贴组成,我使用一个for循环遍历每个贴砖(我知道这样做可能不是最好的方法,对此我可能也需要帮助)。对于角色的每一侧,我都将其沿该方向移动一个像素,并检查是否有碰撞(我还要检查角色是否沿该方向移动)。如果发生碰撞,我将速度设置为0,然后将播放器移至图块的边缘。
我的问题是,如果我首先检查水平碰撞,并且播放器每帧垂直移动一个像素以上,它将处理水平碰撞并将角色移动到瓷砖的侧面,即使瓷砖低于(或高于)性格。如果我先处理垂直碰撞,除了水平轴会执行相同操作外,其他操作都一样。
如何在没有这些问题的情况下处理两个轴上的碰撞?有没有比我做的更好的方法来处理碰撞?