Libgdx Box2d多个SpriteBatch和OrthographicCamera
Libgdx Box2d multiple SpriteBatch and OrthographicCamera
我想要两个 SpriteBatch objects,一个用于实际精灵,一个用于 HUD。我不知道如何让一个 SpriteBatch 相对于屏幕保持不变,但让另一个以玩家的 Body 为中心移动。我有一台用于 box2d 主体的 OrthographicCamera,一台用于精灵。
我以为setProjectionMatrix方法可以解决这个问题,但我可能用错了。
In the main file:
public void render () {
stateManager.getActiveState().update(Gdx.graphics.getDeltaTime());
spriteBatch.setProjectionMatrix(camera.combined);
spriteBatch.begin();
stateManager.getActiveState().render(spriteBatch);
spriteBatch.end();
debugRenderer.render(world, b2dCamera.combined);
}
stateManager.getActiveState().update(Gdx.graphics.getDeltaTime()); calls:
public void update(float dt) {
this.player.update(dt);
this.camera.position.set(this.player.getCenter().x * Game.getPpm(), this.player.getCenter().y * Game.getPpm(), 0);
this.b2dCamera.position.set(this.player.getCenter().x, this.player.getCenter().y, 0);
this.camera.update();
this.b2dCamera.update();
this.joystick.update();
}
stateManager.getActiveState().render(spriteBatch); calls:
public void render(SpriteBatch spriteBatch) {
this.playBatch.begin();
System.out.println(playBatch.getProjectionMatrix());
System.out.println(spriteBatch.getProjectionMatrix());
font.draw(spriteBatch, "Hello", 0, 60);
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
this.player.render(playBatch);
this.joystick.render(spriteBatch);
this.world.step(Gdx.graphics.getDeltaTime(), 8, 3);
this.playBatch.end();
}
这让我 "hello" 留在左下角, body 留在中心并旋转(因为相机以 body 的中心为中心,我的精灵(与 body 关联)向右移动,同时与 body.
同步旋转
我希望精灵不动(在世界中移动,但相机应该像 body 一样以它为中心)并与 body 完全同步。
当我打印 spriteBatch 的 ProjectionMatrix 时,它在每次迭代中都是相同的,但是 playBatch 移动
更新
如果我从主文件
中注释掉 spriteBatch.setProjectionMatrix(camera.combined);
,则没有任何变化
这可能不是使用 HUD 玩游戏的最佳方式,如果您有更好的选择,请告诉我。谢谢
我找到了解决方案。我让两个 spriteBatches 的开始和结束重叠,这导致奇怪的事情发生。我现在调用 begin ... end of one 和 begin ... end of other。
我想要两个 SpriteBatch objects,一个用于实际精灵,一个用于 HUD。我不知道如何让一个 SpriteBatch 相对于屏幕保持不变,但让另一个以玩家的 Body 为中心移动。我有一台用于 box2d 主体的 OrthographicCamera,一台用于精灵。
我以为setProjectionMatrix方法可以解决这个问题,但我可能用错了。
In the main file:
public void render () {
stateManager.getActiveState().update(Gdx.graphics.getDeltaTime());
spriteBatch.setProjectionMatrix(camera.combined);
spriteBatch.begin();
stateManager.getActiveState().render(spriteBatch);
spriteBatch.end();
debugRenderer.render(world, b2dCamera.combined);
}
stateManager.getActiveState().update(Gdx.graphics.getDeltaTime()); calls:
public void update(float dt) {
this.player.update(dt);
this.camera.position.set(this.player.getCenter().x * Game.getPpm(), this.player.getCenter().y * Game.getPpm(), 0);
this.b2dCamera.position.set(this.player.getCenter().x, this.player.getCenter().y, 0);
this.camera.update();
this.b2dCamera.update();
this.joystick.update();
}
stateManager.getActiveState().render(spriteBatch); calls:
public void render(SpriteBatch spriteBatch) {
this.playBatch.begin();
System.out.println(playBatch.getProjectionMatrix());
System.out.println(spriteBatch.getProjectionMatrix());
font.draw(spriteBatch, "Hello", 0, 60);
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
this.player.render(playBatch);
this.joystick.render(spriteBatch);
this.world.step(Gdx.graphics.getDeltaTime(), 8, 3);
this.playBatch.end();
}
这让我 "hello" 留在左下角, body 留在中心并旋转(因为相机以 body 的中心为中心,我的精灵(与 body 关联)向右移动,同时与 body.
同步旋转我希望精灵不动(在世界中移动,但相机应该像 body 一样以它为中心)并与 body 完全同步。
当我打印 spriteBatch 的 ProjectionMatrix 时,它在每次迭代中都是相同的,但是 playBatch 移动
更新 如果我从主文件
中注释掉spriteBatch.setProjectionMatrix(camera.combined);
,则没有任何变化
这可能不是使用 HUD 玩游戏的最佳方式,如果您有更好的选择,请告诉我。谢谢
我找到了解决方案。我让两个 spriteBatches 的开始和结束重叠,这导致奇怪的事情发生。我现在调用 begin ... end of one 和 begin ... end of other。