2D中XNA中的標準方式矢量角度是怎樣工作的?XNA 2D矢量角度 - 什麼是正確的計算方法?
0度分右,90分,180分,270分?
什麼是
float VectortoAngle(Vector2 vec)
和
Vector2 AngleToVector(float angle)
'標準' 的實施,使VectortoAngle(AngleToVector(PI))== PI?
2D中XNA中的標準方式矢量角度是怎樣工作的?XNA 2D矢量角度 - 什麼是正確的計算方法?
0度分右,90分,180分,270分?
什麼是
float VectortoAngle(Vector2 vec)
和
Vector2 AngleToVector(float angle)
'標準' 的實施,使VectortoAngle(AngleToVector(PI))== PI?
要回答你的第一個問題,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度,所以這就是我得到這個部分的地方。最後,在這種情況下,以與它相同的方式將紋理繪製到屏幕上該文件。如此下來,將是繪製紋理倒掛。
沒有約定該方向以特定角度代表了XNA,所以你可以定義它,只要你喜歡。
我不知道當我最後一次在遊戲中使用角度時是。幾乎在所有情況下,如果直接使用矢量,直接使用矢量更容易。
有些事情沒有了。你說0度指向上,但是你的函數返回(1,0),這在我看到的大多數座標系中都是0度。 – drxzcl 2010-03-01 19:00:13
好的,謝謝! – Venesectrix 2010-03-01 23:57:01