libgdx游戏如何在用户点击暂停图标时显示暂停屏幕



在libgdx中,当用户点击暂停时,如何显示暂停屏幕,它应该在当前屏幕上分层,当用户单击恢复时,它应该关闭屏幕,我如何在libgdx中实现它。

我不喜欢这里关于使用原生Android View的建议,这可以在libgdx内部巧妙地完成。

我会有一些变量来定义游戏的当前状态。如果按下了暂停按钮,或者android暂停了游戏(例如,如果用户按下主页按钮),则该变量应获得暂停值。然后在render()方法中,如果该变量的值为pause,则绘制一些暂停屏幕。

这个屏幕可以用多种方式绘制。如果你正在使用一个阶段,你有两个很好的选择:

  1. 如果暂停,除了游戏阶段,在绘制游戏阶段后,还可以使用暂停项目绘制一个圣人。然后它将成为比赛的冠军。

  2. 你可以创建一些Window演员,并将暂停项目添加到其中。然后当游戏暂停时,你可以添加它/使其在你的舞台上可见。

一些示例代码:

public class GameScreen implements Screen {
    private Stage mystage;
    public static final int GAME_RUNNING = 0;
    public static final int GAME_PAUSED = 0;
    private int gamestatus;
    // ...
    public void render(float deltaTime) {
        // draw game normally, probably shouldn't update positions etc. if 
        // the game is paused..
        if (pausebutton is pressed) {
            pauseGame();
        }
        if (gamestatus == GAME_PAUSED) {
            // draw pause screen
        }
    }   
    public void pauseGame() {
        gamestatus = GAME_PAUSED;
    }
    // this is called by android 
    public void pause() {
        pauseGame();
    }
}

不是一个完全可行的例子,但显示了基本逻辑。

将其声明为

public static final int GAME_READY = 0; 
public static final int GAME_RUNNING = 1; 
public static final int GAME_PAUSED = 2; 
public static final int GAME_OVER = 4;
public static int state;

以及在更新方法中

            switch (state) {
    case GAME_READY:
        updateReady();
        break;
    case GAME_RUNNING:
        updateRunning(delta);
        break;
    case GAME_PAUSED:
        updatePaused();
        break;
    case GAME_OVER:
        gameOver = true;
        updateGameOver();
        break;
    }

这肯定会对你有所帮助。

    boolean GAME_PAUSED = false;

    if (GAME_PAUSED) {
    //Do not update camera
        batch.begin();
        resumeButton.draw(batch);
        batch.end();
    } else {
    //Update Camera
    Gdx.gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    world.step(1/60f, 8, 3);
    camera.update();
    debugRenderer.render(world, camera.combined);
    //Do your game running
    }

最新更新