旋转时获取精灵尖端的位置
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;
编码愉快!
我想在旋转时获取精灵的位置, 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;
编码愉快!