我使用正弦和余弦移动一个字符。
player.x += Math.cos(angle) * speed;
player.y += Math.sin(angle) * speed;
当前的停止条件是distance < n
。但如果速度太高,有时角色不会停下来,而是永远继续前进。让它停在正确位置的最佳方法是什么?
PS:它随着鼠标点击而移动。我点击,玩家直接移动到点击的点。
我使用正弦和余弦移动一个字符。
player.x += Math.cos(angle) * speed;
player.y += Math.sin(angle) * speed;
当前的停止条件是distance < n
。但如果速度太高,有时角色不会停下来,而是永远继续前进。让它停在正确位置的最佳方法是什么?
PS:它随着鼠标点击而移动。我点击,玩家直接移动到点击的点。
一个快速的解决方法是检查当前distance
是否比前一个短(前一个动画帧中的那个)。这意味着角色正在接近目标。如果它没有靠近它(当前距离实际上比前一个高),则表示它已经通过它,所以它必须停下来。
在伪代码中:
if distance < n or lastDistance<distance then
stop;
lastDistance = distance;
停止后,您应该将角色定位在目标位置(否则,它将在过冲位置保持静止)。
编辑:如果您不介意角色在达到其目标之前稍作停顿,您可以尝试使用n
取决于当前speed
. 这样,如果角色走得很快,它会在它进入更大的区域时停止。