【问题标题】:Translating screen coordinates to sprite coordinates in XNA在 XNA 中将屏幕坐标转换为精灵坐标
【发布时间】:2010-01-06 04:25:59
【问题描述】:

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

【问题讨论】:

  • 不确定你在问什么。精灵的位置在屏幕坐标中,不是吗?
  • 我想将屏幕上的鼠标点击转换为精灵图像的 X/Y(如果点击在精灵内部)。

标签: xna screen coordinates sprite


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 但是边界框是否考虑到精灵是旋转的?
        猜你喜欢
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多