1

私のゲーム ユニットには、角度変数と targetAngle 変数があります。これらの変数の範囲は 1 ~ 360 度です。

angle 変数は常に targetAngle 変数に向かって移動する必要があります。

問題は、それが最短の方法で起こらないことです。targetAngle が 350 度で、現在の角度が 10 度しかない場合、変数は現在のように 340 度増加するのではなく、20 度だけ移動する必要があります。

angle 変数を targetAngle 変数に向かって最短で移動させるにはどうすればよいですか?

ライブデモ: http://jsfiddle.net/zNsbc/

var angle = 10;
var targetAngle = 350;

setInterval(function() {

    if ( angle > targetAngle ) {
        angle--;
    }
    else if ( angle < targetAngle ) {
        angle++;
    }    

    $("#angle").text(angle);

}, 10);
4

1 に答える 1

1

360 は 0 と同じであることを理解する必要があるため、角度を targetAngle および targetAngle+360 と比較して、最も近い方向に移動できます (0 に近い角度と targetAngle に近い角度については -360 も考慮してください)。 360)

だからあなたの例:

angle:            10
targetAngle:      350 (diff 340)
targetAngle+360:  710 (diff 700)
targetAngle-360: - 10 (diff  20)

angle は targetAngle-360 に最も近いため、インクリメントする代わりにデクリメントします。

:差の絶対値を取るようにしてください

于 2012-06-19T15:40:39.327 に答える