我有一个带有SpriteBatch的GameScreen,可以在上面绘制我所有的纹理,但是现在我想在屏幕上添加一个暂停按钮。我试图在SpriteBatch的顶部使用一个舞台,但是由于某种原因它不会显示。

这是一些代码:

构造函数:

public GameScreen(MyGame game) {

    stage = new Stage();
    table = new Table();

    pause_texture = new Texture("path_to_texture.png");
    pause_image = new Image(pause_texture);
    pause_image.setPosition(1920 - pause_image.getWidth() - 20, 20);

    table.add(pause_image);
    stage.addActor(table);
}


渲染方法:

public void render(float delta) {
    Gdx.gl.glClearColor(1f, 1f, 1f, 1f);
    Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);

    stage.act(delta);
    stage.draw();

    game.camera.update();

    game.batch.setProjectionMatrix(game.camera.combined);

    game.batch.begin();
    //rendering stuff here
    game.batch.end();
}


我究竟做错了什么?

最佳答案

不要在表格上使用绝对位置,只需执行以下操作:

public GameScreen(MyGame game){

    stage = new Stage();
    table = new Table();

    pause_texture = new Texture("path_to_texture.png");
    pause_image = new Image(pause_texture);

    table.add(pause_image);
    table.bottom().right();
    stage.addActor(table);

}


有关更多参考,请参见Libgdx Wiki上的Table

不要忘记移动stage.act(delta);和stage.draw();在batch.end()之后,GUI是应该呈现的最后一件事,因此它可以位于所有内容的前面。

关于java - Hud的舞台不可见,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36866385/

10-10 01:13