我正在尝试在转换的精灵中获取x和y坐标。我有一个简单的200x200精灵,它在屏幕中间旋转 - 原点为(0,0)以保持简单。
我编写了一段代码,可以转换鼠标坐标,但只能使用指定的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));
我怎样才能做到这一点?或者我如何修正我的等式?
答案 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)处绘制精灵而不旋转。