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

时间:2012-07-13 08:05:24

标签: android libgdx

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

3 个答案:

答案 0 :(得分:5)

我不喜欢这里使用原生Android View的建议,这可以在libgdx本身内部完成。

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

可以通过多种方式绘制此屏幕。如果您使用舞台,您有两个很好的选择:

  1. 如果暂停,除了游戏阶段之外,在绘制游戏阶段后绘制带有暂停项目的圣人。然后它将在游戏的顶部。

  2. 您可以创建一些Window actor,并为其添加pause项。然后,当游戏暂停时,您可以添加它/在舞台上显示它。

  3. 一些示例代码:

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

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

答案 1 :(得分:1)

宣布

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

这肯定对你有帮助。

答案 2 :(得分:1)

    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
    }