如何在转换后的精灵中找到coords?

时间:2013-08-12 17:42:08

标签: c# xna-4.0

我正在尝试在转换的精灵中获取x和y坐标。我有一个简单的200x200精灵,它在屏幕中间旋转 - 原点为(0,0)以保持简单。

Screenshot

我编写了一段代码,可以转换鼠标坐标,但只能使用指定的x OR y值。

int ox = (int)(MousePos.X - Position.X);
int oy = (int)(MousePos.Y - Position.Y);

Relative.X = (float)((ox - (Math.Sin(Rotation) * Y /* problem here */)) / Math.Cos(Rotation));
Relative.Y = (float)((oy + (Math.Sin(Rotation) * X /* problem here */)) / Math.Cos(Rotation));

我怎样才能做到这一点?或者我如何修正我的等式?

1 个答案:

答案 0 :(得分:2)

最通用的方法是将转换表示为矩阵。这样,如果您发现需要,可以稍后添加任何其他转换。

对于给定的转换,矩阵为:

var mat = Matrix.CreateRotationZ(Rotation) * Matrix.CreateTranslation(Position);

这个矩阵可以解释为从精灵空间到世界空间的系统转换。你想要逆变换 - 从世界空间到精灵空间的系统转换。

var inv = Matrix.Invert(mat);

您可以使用此矩阵转换鼠标坐标:

var mouseInSpriteSpace = Vector2.Transform(MousePos, inv);

你可以在精灵的本地系统中获得鼠标位置。

您可以使用带有矩阵的mat重载来检查您是否拥有正确的矩阵Spritebatch.Begin()。如果传递矩阵,则在(0,0)处绘制精灵而不旋转。