2011-03-03 107 views
0

我正在开发一款使用Farseer物理引擎的XNA游戏,本质上是一款2D平台游戏。我无法解决绘制精灵和物理引擎所需单位的方法。2D游戏演员坐标vs屏幕坐标

例如,我有一个人的精灵,物理形状只有0.8 x 1.8(米),而且位置也是以米为单位。使重力和现实世界的缩放非常简单。 (我也喜欢我的原点在左下角,但我可以处理思维颠倒)

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

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

在另一个项目(OpenGL)中,我简单地将我的视图矩阵设置为适当的大小,并呈现四边形与他们的纹理。我在XNA中应该如何处理它?还是有人使用XNA的一些秘密方法?

回答

0

我结束了刚刚创建一组顶点,使从(-0.5,-0.5质感的四)改为(0.5,0.5),并在绘制时缩放/平移到合适的位置。

这给出了1:1的绘制/物理对象的比例,使一切都变得简单。我会遇到不同分辨率下精灵大小的问题,但是我认为这是一个小的代价 - 并且要小心精灵的大小。

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

0

我认为你在寻找什么是“虚拟摄影机”,这里有一个很好的教程>http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/

+0

我已经把相机整理出来了,没有什么问题 - 毕竟它只是一个视图矩阵。但是如果我想以[0.8,1.8](以米为单位)的大小在[0.2,4.1]的位置绘制我的球员,并将其放置在屏幕上,则不会有任何矩阵转换使其与SpriteBatch一起工作。 – XwipeoutX 2011-03-03 09:13:31