将2D图像旋转到C#中的一个点

时间:2011-07-03 03:26:02

标签: c# xna rotation textures

我一直在使用旋转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位置修改这个旋转角度。

1 个答案:

答案 0 :(得分:5)

将{C}传递给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