1

我正在开发一个 2D 游戏,其中地形可以变化并且由任何形状的多边形组成,除了自相交的多边形。玩家碰撞箱呈正方形,可以四处移动。我的问题是:如何让一个始终直立的盒子与多变的地形发生碰撞并始终留在外面?

我目前编写的方法虽然没有代码,但如下所示:

原型

蓝色方块是玩家的碰撞箱。首先,它以向下的速度运动为例。我的目标是在其行进路径中找到可以安全地位于地形多边形之外的最高点。我测试了其行进路径内的所有地形顶点,并将它们投影到盒子的速度上。我采取最远的投影。

最远的投影将是允许在不进入地形的情况下移动的最大距离。

沿速度方向移动正方形距离并完成。

但是,我遇到的情况很少,这不起作用。以此为例:

算法失败

为了纠正这种情况,我现在测试正方形的一个角。如果到拐角的距离比最远的投影短,那么该距离将给出适当的距离偏移。这几乎使算法完全证明。除非有人声明另一个例外。

我有点疯了,我会很感激对我的算法的反馈。如果有人对地形上的 2D 直立箱碰撞或任何类似的东西有任何建议或好的读物,那就太好了。

4

1 回答 1

1

可能很有用,这里我将快速详细说明“直立”方形碰撞。

首先碰撞可能发生在正方形的一侧,不一定是角落。检查任何碰撞的简单解决方案是描述由正方形分隔的区域,然后检查不平坦地形的任何点是否在该区域内。

要定义正方形区域,假设您的直立正方形具有角(x1,y1), (x2,y1), (x2,y2), (x1,y2)、 wherex2>x1y2>y1。那么对于一个点(x,y)在正方形内它需要满足条件

If( x1< x < x2 and y1< y <y2) Then (x,y) is in the square.

然后总结一下,您需要做的就是检查地形上的任何点是否满足上述条件。祝你好运。

于 2013-08-04T11:04:29.603 回答