2012-06-19 43 views
1

我的遊戲單位有一個角度變量和一個targetAngle變量。這些變量範圍從1到360度。如何以最短的方式將角度變量移向目標角度

角度變量應該總是朝着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); 

回答

1

應該認識到,360是一樣的0,這樣你就可以targetAngle + 360 targetAngle比較的角度,也和其移動到的方向,它是最接近(考慮-360以及對角接近0和targetAngle接近360)

所以,你的例子:

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

角最接近targetAngle-360,所以你會遞減,而不是增加它

它:一定要取絕對值爲差異

+0

直播爲例:http://jsfiddle.net/ 4Lehy/1/ – Etienne

+0

@Etienne - 這是我想要的[更好的表示形式](http://jsfiddle.net/J4Y2u/7/) – Attila

+0

謝謝你的例子!不幸的是,它不工作,因爲它應該([嘗試角度300例如](http://jsfiddle.net/J4Y2u/10/))將玩更多 – Nick