【发布时间】:2010-01-06 04:25:59
【问题描述】:
我在 XNA 中有一个精灵对象。
它有大小、位置和旋转。
如何将一个点从屏幕坐标转换为精灵坐标?
谢谢,
短波
【问题讨论】:
-
不确定你在问什么。精灵的位置在屏幕坐标中,不是吗?
-
我想将屏幕上的鼠标点击转换为精灵图像的 X/Y(如果点击在精灵内部)。
标签: xna screen coordinates sprite
我在 XNA 中有一个精灵对象。
它有大小、位置和旋转。
如何将一个点从屏幕坐标转换为精灵坐标?
谢谢,
短波
【问题讨论】:
标签: xna screen coordinates sprite
您需要计算精灵的变换矩阵,将其反转(因此变换现在从世界空间 -> 局部空间)并通过反转矩阵变换鼠标位置。
Matrix transform = Matrix.CreateScale(scale) * Matrix.CreateRotationZ(rotation) * Matrix.CreateTranslation(translation);
Matrix inverseTransform = Matrix.Invert(transform);
Vector3 transformedMousePosition = Vector3.Transform(mousePosition, inverseTransform);
【讨论】:
您可能会发现以下 XNA 拾取示例很有用:
【讨论】:
一种解决方案是对精灵的原始未旋转边界框进行测试。 所以给定2D屏幕向量(x,y):
通过考虑精灵形状,命中测试当然可以更准确。
【讨论】:
我认为这可能就像在Rectangle 上使用Contains 方法一样简单,矩形是您的精灵的边界框。我已经在 XNA 中以这种方式实现了拖放;我相信Contains 测试基于 x 和 y 作为屏幕坐标。
【讨论】: