簡體   English   中英

如何以最短的方式將角度變量移向目標角度

[英]How to move an angle variable towards a target angle in the shortest way

我的游戲單元有一個angle變量和一個targetAngle變量。 這些變量的范圍是1到360度。

角度變量應始終移向targetAngle變量。

問題是,它不會以最短的方式發生。 當targetAngle為350度且當前角度僅為10度時,變量應僅移動20度,而不是像我現在那樣增加340度。

如何使角度變量以最短的方式向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);

您應該意識到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)

角度最接近targetAngle-360,因此您可以減少它,而不是增加它

注意 :確保取絕對值作為差值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM