二维静态箱体与可变地形的碰撞

时间:2013-07-30 06:07:01

标签: c++ algorithm 2d collision-detection physics

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

我目前采用的方法虽然没有代码,但仍然如下:

prototype

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

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

沿速度方向移动方块并完成。

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

Failure of algorithm

为了解决这种情况,我现在测试广场的一个角落。如果距拐角的距离比最远的投影短,则该距离将给出适当的距离偏移。这几乎使算法完全证明。除非有人说出另一个例外。

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

1 个答案:

答案 0 :(得分:1)

This可能会有用,在这里我将详细阐述“直立”方形碰撞。

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

要定义方形区域,请假设您的直立方格具有角(x1,y1), (x2,y1), (x2,y2), (x1,y2),其中x2>x1y2>y1。然后,对于点(x,y)在广场内,它需要满足条件

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

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