2013-06-27 78 views
-1

我使用正弦和余弦移动角色。如何做停止状态

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

当前的停止条件是distance < n。但是如果速度太快,有时候角色不会停下来,并且会一直持续下去。什么是使其停止正确的地方的最佳途径?

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

回答

0

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

伪代码:

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

停止后,应查找目标位置的字符(否则,它会留在overshooted位置静态)。

编辑:如果您不介意在达到其目标前停止一下字符,您可以尝试使用取决于当前speed的值n。那样的话,如果角色走得快,那么当角色进入更大的区域时,角色就会停止。