【问题标题】:2D Game Actor coordinates vs screen coordinates2D 游戏 Actor 坐标与屏幕坐标
【发布时间】:2011-03-03 08:43:13
【问题描述】:

我正在 XNA 中开发一款使用 Farseer 物理引擎的游戏,本质上是一个 2D 平台游戏。我无法解决绘制精灵与物理引擎所需单位的方法。

例如,我有一个人的精灵,物理形状只是 0.8 x 1.8(米),并且位置也是米。使重力和现实世界的缩放变得非常简单。 (我也喜欢左下角的出身,但我可以处理颠倒的想法)

然而,标准的 2d 渲染方式是 SpriteBatch.Draw,它以 1:1 的像素比工作,原点位于左上角。

协调这一点的标准方法是什么?我最初只是手动计算出矩形的缩放位置/大小,并使用 SpriteBatch 的源/目标参数,但它看起来很狡猾而且很慢。理想情况下,我想设置一个投影矩阵,然后使用来自物理对象的信息绘制所有内容。唉,它需要的所有矩形都是整数,而不是浮点数,所以它不能很好地工作......

在另一个项目 (OpenGL) 中,我简单地将我的视图矩阵设置为适当的大小,并在其上渲染带有纹理的四边形。这也是我应该在 XNA 中处理它的方式吗?或者有没有一些使用 XNA 的人有什么秘密方法?

【问题讨论】:

    标签: xna physics render sprite


    【解决方案1】:

    我想你要找的是“相机虚拟化”,这里有一个很好的教程>http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/

    【讨论】:

    • 我已经把相机整理好了,这没有问题——毕竟它只是一个视图矩阵。但是,如果我想在位置 [0.2, 4.1] 以 [0.8, 1.8] (以米为单位)的大小绘制我的玩家,并将其放在屏幕上,再多的矩阵变换都无法使用 SpriteBatch。跨度>
    【解决方案2】:

    我最终只创建了一组顶点来制作从 (-0.5, -0.5) 到 (0.5, 0.5) 的纹理四边形,并在绘制时将其缩放/平移到适当的位置。

    这提供了 1:1 的绘图/物理对象比例,让一切变得简单。我会在不同分辨率下遇到精灵大小的问题,但我认为这是一个很小的代价 - 并且通过小心精灵大小来规避。

    如果有人没有提出更好的解决方案,我会将此标记为答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2020-07-16
      相关资源
      最近更新 更多