-1

我使用正弦和余弦移动一个字符。

player.x += Math.cos(angle) * speed;
player.y += Math.sin(angle) * speed;

当前的停止条件是distance < n。但如果速度太高,有时角色不会停下来,而是永远继续前进。让它停在正确位置的最佳方法是什么?

PS:它随着鼠标点击而移动。我点击,玩家直接移动到点击的点。

4

1 回答 1

0

一个快速的解决方法是检查当前distance是否比前一个短(前一个动画帧中的那个)。这意味着角色正在接近目标。如果它没有靠近它(当前距离实际上比前一个高),则表示它已经通过它,所以它必须停下来。

在伪代码中:

if distance < n or lastDistance<distance then
    stop;
lastDistance = distance;

停止后,您应该将角色定位在目标位置(否则,它将在过冲位置保持静止)。

编辑:如果您不介意角色在达到其目标之前稍作停顿,您可以尝试使用n取决于当前speed. 这样,如果角色走得很快,它会在它进入更大的区域时停止。

于 2013-06-27T13:43:47.847 回答