我正在开发一个 2D 游戏,其中地形可以变化并且由任何形状的多边形组成,除了自相交的多边形。玩家碰撞箱呈正方形,可以四处移动。我的问题是:如何让一个始终直立的盒子与多变的地形发生碰撞并始终留在外面?
我目前编写的方法虽然没有代码,但如下所示:
蓝色方块是玩家的碰撞箱。首先,它以向下的速度运动为例。我的目标是在其行进路径中找到可以安全地位于地形多边形之外的最高点。我测试了其行进路径内的所有地形顶点,并将它们投影到盒子的速度上。我采取最远的投影。
最远的投影将是允许在不进入地形的情况下移动的最大距离。
沿速度方向移动正方形距离并完成。
但是,我遇到的情况很少,这不起作用。以此为例:
为了纠正这种情况,我现在测试正方形的一个角。如果到拐角的距离比最远的投影短,那么该距离将给出适当的距离偏移。这几乎使算法完全证明。除非有人声明另一个例外。
我有点疯了,我会很感激对我的算法的反馈。如果有人对地形上的 2D 直立箱碰撞或任何类似的东西有任何建议或好的读物,那就太好了。