当前位置: 首页 > 知识库问答 >
问题:

Libgdx Box2d多个SpriteBatch和OrthograicCamera

毕富
2023-03-14

我想要两个SpriteBatch对象,一个用于实际的sprites,另一个用于HUD。我不知道如何让一个SpriteBatch保持相对屏幕的位置,但让另一个SpriteBatch以玩家的身体为中心移动。我有一个用于box2d身体的正交摄像头和一个用于精灵的正交摄像头。

我以为setProjingMatrix方法可以解决这个问题,但我可能用错了。

在主文件中:

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()。更新(Gdx.graphics.getDeltaTime());电话:

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()。渲染(spriteBatch);电话:

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();
    }

这给了我停留在左下角的“你好”,一个停留在中心并旋转的身体(因为相机居中于身体中心,我的精灵(与身体关联)在与身体同步旋转的同时向右移动。

我希望精灵不移动(在世界上移动,但相机应该像它与身体一样聚焦在它身上),并与身体完全同步。

当我打印spriteBatch的投影矩阵时,它在每次迭代中都是相同的,但是playBatch会移动

更新没有什么变化,如果我注释出spriteBatch.set投影矩阵(camera.combined);从主文件

这可能不是使用hud进行游戏的最佳方式,所以如果你有更好的选择,请告诉我。非常感谢。

共有1个答案

阮星火
2023-03-14

我找到了解决办法。我让两个精灵的开始和结束重叠,这会导致奇怪的事情发生。我现在打电话给begin。。。结束一个,开始。。。另一端。

 类似资料:
  • 我用SpriteBatch绘制纹理,用ShapeRenderer绘制形状。 这是我在演员中的代码 并在屏幕上调用stage.draw() 它正在工作,但不可预测地抛出异常:

  • 我成功地为1台服务器设置了Kerberos身份验证,并且运行正常。现在我有一个项目,我必须在其中向Kerberos配置添加另一台服务器,如下所示: 1)广告服务器 2)运行服务的服务器1 3) 服务器 2,其中将运行相同的服务 所以我执行了 setpn 命令,将两者都评估为单个“spn”用户: setspn-s服务X/server1.domain.com@DOMAIN.COM特殊目的网络 sets

  • 问题内容: 我想在操作完成后使用一个回调函数,我正在尝试如下操作: 问题在于,在操作完成之前会触发回调函数。 问题答案: 这是因为jQuery.when()需要jQuery.Deferred实例,而load()返回jQuery实例(请参见http://api.jquery.com/jQuery.when/和http://api.jquery.com/load/)。 您可以解决此问题:

  • 我有两个配置文件(“autoContido”和“weblogic”),其中每个配置文件都有两个配置类,因为我使用的是两个数据源。 我已经将特定数据源中的bean注释为@Primary,而另一个数据源配置类中的bean不是@Primary,但我对它们的命名不同。 我以为使用@主注释就不会有像下面这样的错误,但我仍然得到它们。有人能帮我看看问题出在哪里吗? 我尝试使用@Primary annotati

  • 问题内容: 我正在使用Spring和Hibernate,Spring的配置如下。如何配置两个数据源, session factories。使用注释管理事务。请指教 问题答案: 在Hibernate DAO中,我们可以使用@Qualifier注释,如下所示连接2个会话工厂

  • 问题内容: 我有两个数据库和两个模型:管理员和用户。 我想将我的模型同步到两个数据库;admin模型到数据库A,用户模型到数据库B; 如果我将模型路径设置为和,则两个模型将同步到默认数据库。 如果我在命令中设置数据库,例如,则两个模型将同步到数据库B。 所以我的问题是,如何将两个模型同步到两个数据库? 问题答案: 我完全同意@alecxe使用数据库路由器。我目前正在使用一个管理界面来管理多个数据库