2011-07-03 112 views
3

我一直在使用旋轉的Texture2D精靈。我一直在使用:向C中的點旋轉2D圖像#

float circle = MathHelper.Pi * 2;
RotationAngle = RotationAngle%circle;

ScreenManager.SpriteBatch.Draw(汽車,screenpos,NULL,Color.White,RotationAngle,car_origin,1.0F,SpriteEffects.None,0F);

大部分處理我的測試紋理「汽車」的旋轉。看起來像Pi * 2的旋轉角度是取決於方向的介於0和-6.283185或0和6.283185之間的值。現在我想要做的是將特定方向的紋理(比如紋理是一個箭頭)轉向一個位置(vector2,比如當前的鼠標位置)。我不太清楚如何根據vector2位置來修改這個旋轉角度。

回答

5

傳遞給SpriteBatch.Draw時,您不需要包裝角度。但是,如果您出於某種原因想要換角度,最好使用MathHelper.WrapAngleMSDN)。

現在說你有一個Vector2代表一個方向和一個距離(例如,如果你做了mousePos - carPos,從汽車到光標的方向和距離)。你想要採取這個方向並將其轉換成一個角度。使用extension method像這樣的:

public static float Angle(this Vector2 v) 
{ 
    return (float)Math.Atan2(v.Y, v.X); 
} 

所以,讓你的角度,你會做這樣的事情:(mousePos - carPos).Angle()

有關更多詳細信息,請參閱documentation for Atan2

+2

你先生是天才。我只是試過了,它很好用,謝謝! – Ted