使用浮子时,正确移动到准确位置

时间:2014-08-18 00:39:47

标签: c++ sdl

在我的寻路游戏中,我有以下代码:

void Dot::move( Tile *tiles[], float timeStep )
{
        mVelX = (points[currentPoint].x * TILE_WIDTH)
                + (TILE_WIDTH / 2 - DOT_WIDTH / 2)- mBox.x;
        mVelY = (points[currentPoint].y * TILE_HEIGHT)
                + (TILE_HEIGHT / 2 - DOT_HEIGHT / 2) - mBox.y;

        mBox.x += mVelX * DOT_VEL * timeStep;
        mBox.y += mVelY * DOT_VEL * timeStep;
}

mBox是职位。 points指的是探路者的解决方案。点从瓷砖移动到瓷砖没有任何问题,但它始终"偏离中心"。

http://i.stack.imgur.com/6jszZ.png

我考虑过的一些解决方案:

  1. 在每个图块的中心创建一个小的边界框。然而,这有时会错过"碰撞。

  2. 使用epsilon值。不幸的是,这会导致反复试验和错误结果。

  3. 另一个问题是缓和(例如增加摩擦力)。点将"滑动"比它到达中心所需的时间更长。这会导致尴尬的动作。

1 个答案:

答案 0 :(得分:1)

如果你可以将圆圈的“位置”设置为圆圈的中心而不是边缘,那么你应该没问题。如果你将右边缘保持为“位置”,那么当你将它放在中心或其他任何位置时,你应该将它偏移到圆圈的半径右边。

我尽我所能回答了这个问题,但很难用所提供的代码给出完整,准确和正确的答案。