您需要做的是创建一个从原点到旋转点的Vector2在旋转之前,然后旋转该向量。
例如,假设我们有一个以原点为中心的精灵,我们想知道当精灵旋转时前点在哪里。
首先,创建一个从原点到要在未旋转精灵上旋转的点的向量。在这种情况下,它可能会在中心右侧 20 像素处:
var vector = new Vector2(20, 0);
现在我们可以用这个简单的函数来旋转我们的向量(借用MonoGame.Extended)
public static Vector2 Rotate(Vector2 value, float radians)
{
var cos = (float) Math.Cos(radians);
var sin = (float) Math.Sin(radians);
return new Vector2(value.X*cos - value.Y*sin, value.X*sin + value.Y*cos);
}.
现在我们可以像这样得到我们的旋转向量:
var radians = MathHelper.ToRadians(degrees: -33);
var rotatedVector = Rotate(vector, radians);
为了让这个向量回到“精灵”空间,我们可以将它添加回我们的原点:
var point = origin + rotatedVector;
或者,如果您希望它在“世界”空间中,您也可以将其添加到您的精灵位置。
var worldPoint = position + origin + rotatedVector;
编码愉快!