如何正确渲染Box2DDebugRenderer

时间:2015-11-05 14:05:45

标签: libgdx

我使用Box2DDebugRenderer渲染Box2D Debug时遇到了一些问题。 我有2张OrthographicCamera,一张用于渲染世界(名为Cam),另一张用于HUD(healthBar,Armor,...)(名为hudCam)。

我试图渲染:

  • b2dr.render(world,cam.combined); - >我看不到Box2D

  • b2dr.render(world,cam.projection); enter image description here

  • b2dr.render(world,hudCam.combined); enter image description here

  • b2dr.render(world,hudCam.projection); enter image description here

  • b2dr.render(世界,新的OrthographicCamera()。合并);和b2dr.render(世界,新的OrthographicCamera()。投影) enter image description here

我找不到像Box一样渲染Box2D的方法,以查看所有实体的边缘。

如果有人理解我的问题,请帮助我!

THX。

1 个答案:

答案 0 :(得分:2)

不幸的是,有些教程建议在使用Box2D时使用从米到像素的转换。这不是必要的(至少对于Libgdx),因为这种转换可以通过使用相机来完成 您的案例中的问题是,在呈现Sprite时您使用的是从像素到像素的转换,而Box2DDebugRenderer会将所有内容呈现为1:1。 要解决此问题,您必须摆脱从米到像素的转换,并使用cameraviewport来“缩放”事物。
这样,Box2DDebugRenderer和您的SpriteBatch可以(并且应该)使用相同的camera进行渲染。

对于camera / viewport
构造函数具有参数宽度和高度。这些参数通常设置为Gdx.graphics.getWidth()Gdx.graphics.getHeight(),在我的选择中不正确,游戏应该与分辨率无关。 您应该根据您的播放器(或任何其他可见实体)在现实生活中的大小以及它在屏幕上的大小来选择这些值。
假设你有一个小小的特征,就像你的游戏一样。它实际上是1米高,应该占屏幕高度的1/13(或多或少像在你的第一张照片中,屏幕大约是角色的13倍)。
因此,您的相机高度应为13,您的角色高度(也是Box2D s Body高度)应为1米。接下来,您需要定义宽度。为此我想考虑我想要的宽高比。让我们假设游戏应该专注于16/9设备,然后宽度为(13/9)*16=23 现在你的相机应该像这样创建:

camera = new OrthographicCamera(23, 13);