2013-07-30 19 views
1

我正在一个2D游戏中进行工作,其中地形可以变化,并且由任何形状的多边形构成,除了自相交之外。玩家碰撞盒呈正方形,可以移动。我的问题是:我如何让一个始终直立的盒子与变化的地形碰撞并始终保持在外面?二维静态框与可变地形的碰撞

我认为我做了虽然没有代码目前的做法尚未就像如下:

prototype

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

最远的投影将是允许移入而不进入地形的最大距离。

在速度方向上按距离移动平方并完成。

但是,在遇到这种情况时,我遇到了几个不适用的情况。以此为例子:

Failure of algorithm

为了解决这个问题,我现在测试的广场一角。如果距离角落的距离比最远的投影距离短,那么该距离会给出适当的距离变化。这几乎使算法充分证明。除非有人指出另一个例外。

我会有点疯狂,我会很感激我的算法反馈。如果任何人有任何建议或有关地形或类似的任何类似的2D立柱箱体碰撞的好消息,那就太棒了。

+0

甚至没有upvote?我相信,stackoverflow只能回答简单的问题。 – sgtHale

回答

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. 

然后得出结论,所有你需要做的是检查是否对地形任意点满足上述条件。 祝你好运。

+0

这只适用于不移动的正方形。这个问题处理的是一个移动的正方形,像上图那样留下一条速度路径。 – sgtHale

+0

问题是一样的,每一次你需要检查上面的标准。如果你想要盒子可以占据的所有位置,你必须在每个点都检查这个标准。如果想要别的东西,除了当一个盒子碰撞变量地形时,你必须澄清你的问题。 –

+0

用速度检查每个时刻的位置,听起来效率极低。 – sgtHale