我使用Box2DDebugRenderer渲染Box2D Debug时遇到了一些问题。 我有2张OrthographicCamera,一张用于渲染世界(名为Cam),另一张用于HUD(healthBar,Armor,...)(名为hudCam)。
我试图渲染:
b2dr.render(world,cam.combined); - >我看不到Box2D
b2dr.render(世界,新的OrthographicCamera()。合并);和b2dr.render(世界,新的OrthographicCamera()。投影)
我找不到像Box一样渲染Box2D的方法,以查看所有实体的边缘。
如果有人理解我的问题,请帮助我!
THX。
答案 0 :(得分:2)
不幸的是,有些教程建议在使用Box2D
时使用从米到像素的转换。这不是必要的(至少对于Libgdx),因为这种转换可以通过使用相机来完成
您的案例中的问题是,在呈现Sprite
时您使用的是从像素到像素的转换,而Box2DDebugRenderer
会将所有内容呈现为1:1。
要解决此问题,您必须摆脱从米到像素的转换,并使用camera
或viewport
来“缩放”事物。
这样,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);