Xna 2D游戏演员坐标与屏幕坐标

Xna 2D游戏演员坐标与屏幕坐标,xna,physics,render,sprite,Xna,Physics,Render,Sprite,我正在XNA开发一个游戏,它使用Farseer物理引擎,本质上是一个2d平台。我在解决绘制精灵与物理引擎所需单位的方法时遇到问题 例如,我有一个人的精灵,物理形状是0.8x1.8(米),位置也是以米为单位。使重力和真实世界的缩放非常简单。(我也喜欢左下角的原点,但我能处理从上到下的思考) 但是,二维渲染的标准方式是SpriteBatch.Draw,它以1:1的像素比工作,原点位于左上角 协调这一点的标准方法是什么?起初,我只是手动计算出矩形的缩放位置/大小,并使用了SpriteBatch的源/目

我正在XNA开发一个游戏,它使用Farseer物理引擎,本质上是一个2d平台。我在解决绘制精灵与物理引擎所需单位的方法时遇到问题

例如,我有一个人的精灵,物理形状是0.8x1.8(米),位置也是以米为单位。使重力和真实世界的缩放非常简单。(我也喜欢左下角的原点,但我能处理从上到下的思考)

但是,二维渲染的标准方式是SpriteBatch.Draw,它以1:1的像素比工作,原点位于左上角

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


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

我想你要找的是“相机虚拟化”,这里有一个很好的教程>/p>我最后只是创建了一组顶点,以制作一个从(-0.5,-0.5)到(0.5,0.5)的纹理四边形,并在绘制时将其缩放/转换到适当的位置

这使得绘制/物理对象比率为1:1,使一切变得简单。在不同的分辨率下,我会遇到雪碧大小的问题,但我认为这是一个很小的代价——通过小心使用雪碧大小可以避免


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

我已经整理好相机,这没有问题-毕竟它只是一个视图矩阵。但是,如果我想在[0.2,4.1]位置绘制尺寸为[0.8,1.8](以米为单位)的播放器,并将其放在屏幕上,再多的矩阵变换也不能使SpriteBatch起作用。