0

我在 XNA 中有一个精灵对象。
它有大小、位置和旋转。
如何将一个点从屏幕坐标转换为精灵坐标?
谢谢,
西南

4

4 回答 4

3

您需要为您的精灵计算变换矩阵,将其反转(因此变换现在从世界空间-> 局部空间)并通过反转矩阵变换鼠标位置。

Matrix transform = Matrix.CreateScale(scale) * Matrix.CreateRotationZ(rotation) * Matrix.CreateTranslation(translation);

Matrix inverseTransform = Matrix.Invert(transform);
Vector3 transformedMousePosition = Vector3.Transform(mousePosition, inverseTransform);
于 2010-01-05T20:25:59.873 回答
0

我认为它可能就像使用Containson 方法一样简单Rectangle,矩形是你的精灵的边界框。我已经在 XNA 中以这种方式实现了拖放;我相信Contains基于 x 和 y 的测试是屏幕坐标。

于 2009-12-17T18:46:35.407 回答
0

您可能会发现以下 XNA 拾取示例很有用:

http://creators.xna.com/en-us/sample/picking

于 2009-12-17T19:22:58.860 回答
0

一种解决方案是对精灵的原始未旋转边界框进行测试。因此,给定 2D 屏幕矢量 (x,y):

  1. 将 2D 向量转换为局部精灵空间: (x,y) - (spritex,spritey)
  2. 应用反向精灵旋转
  3. 针对边界框执行命中测试

通过考虑精灵形状,命中测试当然可以更准确。

于 2009-12-17T09:26:11.217 回答