将屏幕坐标转换为XNA中的精灵坐标

时间:2009-12-16 21:49:38

标签: xna screen coordinates sprite

我在XNA中有一个精灵对象 它有尺寸,位置和旋转 如何将一个点从屏幕坐标转换为精灵坐标?
谢谢,
SW

4 个答案:

答案 0 :(得分:3)

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

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

Matrix inverseTransform = Matrix.Invert(transform);
Vector3 transformedMousePosition = Vector3.Transform(mousePosition, inverseTransform);

答案 1 :(得分:0)

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

  1. 将2D矢量转换为局部精灵空间:(x,y) - (spritex,spritey)
  2. 应用反向精灵旋转
  3. 对边界框执行命中测试
  4. 通过考虑精灵形状,当然可以使命中测试更加准确。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您可能会发现以下XNA选取示例非常有用:

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