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

Ted*_*Ted 3 c# xna textures rotation

我一直在使用旋转Texture2D精灵.我一直在使用:

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

ScreenManager.SpriteBatch.Draw(car,screenpos,null,Color.White,RotationAngle,car_origin,1.0f,SpriteEffects.None,0f);

在大多数情况下处理我的测试纹理"汽车"的旋转.看起来Pi*2的旋转角度是0到-6.283185或0到6.283185之间的值,具体取决于方向.现在我想要做的是将纹理沿某个方向(比如纹理是一个箭头)朝一个位置(一个vector2,如当前鼠标位置)旋转.我不太清楚如何根据vector2位置修改这个旋转角度.

And*_*ell 5

传递给它时不需要包装角度SpriteBatch.Draw.但是如果你因某种原因想要包装角度,最好使用MathHelper.WrapAngle(MSDN).

现在说你有一个Vector2代表方向和距离的东西(例如,如果你这样做的话mousePos - carPos,代表从汽车到光标的方向和距离).而你想要采取这个方向并将其转换为一个角度.使用像这样的扩展方法:

public static float Angle(this Vector2 v)
{
    return (float)Math.Atan2(v.Y, v.X);
}
Run Code Online (Sandbox Code Playgroud)

所以,为了获得你的角度你会做一些事情:(mousePos - carPos).Angle().

有关更多详细信息,请参阅文档Atan2.

  • 你先生是个天才.我只是试了一下,效果很好,谢谢! (2认同)