2010-02-16 148 views
12

2D中XNA中的標準方式矢量角度是怎樣工作的?XNA 2D矢量角度 - 什麼是正確的計算方法?

0度分右,90分,180分,270分?

什麼是

float VectortoAngle(Vector2 vec) 

Vector2 AngleToVector(float angle) 

'標準' 的實施,使VectortoAngle(AngleToVector(PI))== PI?

回答

21

要回答你的第一個問題,0度向上,90度向右,180度向下,270度向左。 Here是一個簡單的2D XNA旋轉教程,爲您提供更多信息。

至於向量轉換成角和背,我發現一對夫婦好的實現here

Vector2 AngleToVector(float angle) 
{ 
    return new Vector2((float)Math.Cos(angle), (float)Math.Sin(angle)); 
} 

float VectorToAngle(Vector2 vector) 
{ 
    return (float)Math.Atan2(vector.Y, vector.X); 
} 

另外,如果你是新來的2D節目,你可能想看看Torque X 2D,它提供了一個很多這個給你。如果你花錢爲XNA開發,你可以免費獲得引擎二進制文件,並且有一個實用工具類,可以從角度轉換爲矢量,並返回其他有用的功能。

編輯:正如Ranieri在評論中指出的那樣,功能在up爲0度時沒有意義。這裏是一個沒有(最多爲(0,-1),右邊是(1,0),下降爲(0,1),左爲(-1,0):

Vector2 AngleToVector(float angle) 
{ 
    return new Vector2((float)Math.Sin(angle), -(float)Math.Cos(angle)); 
} 

float VectorToAngle(Vector2 vector) 
{ 
    return (float)Math.Atan2(vector.X, -vector.Y); 
} 

我也想注意我已經使用了Torque一段時間,並且它使用了0度,所以這就是我得到這個部分的地方。最後,在這種情況下,以與它相同的方式將紋理繪製到屏幕上該文件。如此下來,將是繪製紋理倒掛。

+1

有些事情沒有了。你說0度指向上,但是你的函數返回(1,0),這在我看到的大多數座標系中都是0度。 – drxzcl 2010-03-01 19:00:13

+0

好的,謝謝! – Venesectrix 2010-03-01 23:57:01

1

沒有約定該方向以特定角度代表了XNA,所以你可以定義它,只要你喜歡。

我不知道當我最後一次在遊戲中使用角度時是。幾乎在所有情況下,如果直接使用矢量,直接使用矢量更容易。

相關問題