使单点碰撞物体符合不平坦的地形,同时保持恒定的距离

这可能是最好的形象描述: 第一排:站立角色,在平地上移动角色,在倾斜地面上移动角色; botton row:在多坡地上移动角色

我有一个角色。 对于地面碰撞,它使用一个点(红色的X)。 当角色移动时,符合地形; 注意蓝线(每帧的移动)是如何是相同的长度,无论斜率。

我有前三个情况工作正常。 这个问题是最后一个,角色越过坡度的变化。 我只是通过旋转即将到来的运动vector来处理单斜坡的情况,但显然这在这里不起作用。

我的第一本能是做这样的事情:

  1. 沿第一个斜坡测量下一个顶点的长度。
  2. 从即将到来的运动vector减去长度。
  3. 将即将到来的运动vector定位在顶点; 旋转以匹配第二斜坡并得到最终的位置。
  4. 把字符放在结果位置。

问题是,如果角色必须同时跨越三个或更多的区段(也许它在非常类似的地形上移动速度非常快),这似乎并不会很好地链接。

所以基本上在这一点上,我正在看看是否有一个更简单的解决scheme,我错过了。

所以你想要的是这样的?

喜欢这个?

正如斯蒂芬所说,你有正确的想法,只要重复它,直到你完全没有动静。

1. Measure length to next vertex along first slope. while( impending movement vector > length to next vertex ) { 2. Subtract length from impending movement vector. 3. Position impending movement vector at vertex... 1. Measure length to next vertex along first slope. } 3.1 ...rotate to match second slope and get resulting position. 4. Put character at result position. 

你正在描述正确的algorithm。 如果你留下剩余的运动,那么你不得不跨过多less段。 您所描述的所有计算都是O(1)计算,所以性能不是问题。

请记住,所有地形都是三角形的,因此Trig和/或点积可能会提供一些计算优势,但仍在O(1)域内。

我想地形是从图片2D。 如果是地形,则每个垂直点之间的{x}轴距离应该是恒定的。 我也同时把这两名球员都接地了。

现在让我们有这样的可变参数:播放器1: p1 ,我们有p1.x and p2.x

玩家2:与玩家1相同的p2让我们也说玩家p1是在p2之前换句话说他是在他后面的垂直arrays: V长度n

和每个顶点之间的{x}间距:s

现在我们需要find的是一个我们称之为“距离”的浮点variables

我也考虑地形起点是在x=0algorithm:

首先,我们需要确定起点和终点的顶点索引v_start v_end

除以p1和p2,我们可以find玩家站在哪个段上。 当玩家1在玩家2后面时,我们发现我们需要从玩家1的区段和从玩家2的后向垂直取得前置垂直。所以,当find这个时,我们可以开始计算距离。

注意现在我们有v_start v_end

假设我们有函数dist它在2d空间中find距离

你必须计算玩家1和v_start与玩家2和v_end之间的距离

然后我们需要findv_start和v_end之间的所有段的距离

我们有:

 distance = 0 for(int v = v_start; p<v_end;p++)distance+=dist(verts[v],verts[v+1]); distance += dist(p1,verts[v_start]); distance += dist(p2,verts[v_end]);