旋转

时间:2018-05-20 13:26:55

标签: c# xna sprite monogame

我希望在旋转时获得精灵的位置, Example

更大的点是我想要获得的位置(旋转时),并且精灵旋转所以很难得到它,并且我对如何获得它一无所知,对于任何人来说,原点是(0,0)问,是否有任何数学需要做才能得到这个?

1 个答案:

答案 0 :(得分:1)

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

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

enter image description here

首先,创建一个从原点到想要在未旋转的精灵上旋转的点的矢量。在这种情况下,它可能会像中心右侧的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"我们可以将它添加回原点:

var point = origin + rotatedVector;

或者如果你想在世界"空间你也可以把它添加到你的精灵位置。

var worldPoint = position + origin + rotatedVector;

快乐的编码!