我一直在使用旋转Texture2D精灵。我一直在使用:
浮动圈= MathHelper.Pi * 2;
RotationAngle = RotationAngle%circle;
和
ScreenManager.SpriteBatch.Draw(car,screenpos,null,Color.White,RotationAngle,car_origin,1.0f,SpriteEffects.None,0f);
大部分用于处理我的测试纹理“car”的旋转。看起来Pi * 2的旋转角度是0到-6.283185或0到6.283185之间的值,具体取决于方向。现在我想要做的是将纹理沿某个方向(比如纹理是一个箭头)朝一个位置(一个vector2,如当前鼠标位置)旋转。我不太清楚如何根据vector2位置修改这个旋转角度。
答案 0 :(得分:5)
将{C}传递给SpriteBatch.Draw
时,无需包装角度。但如果您因某种原因想要包装角度,最好使用MathHelper.WrapAngle
(MSDN)。
现在说你有一个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
。