我希望在旋转时获得精灵的位置, Example
更大的点是我想要获得的位置(旋转时),并且精灵旋转所以很难得到它,并且我对如何获得它一无所知,对于任何人来说,原点是(0,0)问,是否有任何数学需要做才能得到这个?
答案 0 :(得分:1)
您需要做的是在旋转之前从原点到旋转点创建一个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);
让这个向量回到" sprite"我们可以将它添加回原点:
var point = origin + rotatedVector;
或者如果你想在世界"空间你也可以把它添加到你的精灵位置。
var worldPoint = position + origin + rotatedVector;
快乐的编码!