-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 に答える