旋转时获取精灵尖端的位置

Getting the position of the the tip of a sprite, while rotated

我想在旋转时获取精灵的位置, Example

更大的点是我想要得到的位置(旋转时),精灵是旋转的所以很难得到它,我不知道如何得到它,原点是(0,0)对于任何人问,是否需要做任何数学运算才能得到这个?

您需要做的是在旋转之前创建一个从原点到旋转点Vector2,然后旋转该向量。

例如,假设我们有一个原点位于中心的 sprite,我们想知道旋转 sprite 时前点的位置。

首先,在未旋转的精灵上创建一个从原点到要旋转的点的向量。在这种情况下,它可能位于中心右侧 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);

为了让这个向量回到 "sprite" space 我们可以把它加回到我们的原点:

var point = origin + rotatedVector;

或者,如果您想要它在 "world" space 中,您也可以将它添加到您的 sprites 位置。

var worldPoint = position + origin + rotatedVector;

编码愉快!