2012-07-13 46 views

回答

4

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

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

此屏幕可以用多种方式绘制。如果您使用的是舞台,你有两个伟大的选择:

  1. 如果停下来,除了游戏阶段,绘制暂停项目圣人绘制的游戏阶段之后。然后它会在游戏之上。

  2. 您可以创建一些窗口actor,并向其添加暂停项目。然后当游戏暂停时,将其添加/使其在舞台中可见。

一些示例代码:

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

声明它

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

你应该使用一个'enum'代替,就像这样: '公共枚举游戏状态{ 就绪,正在运行,暂停,GAMEOVER }' '公共游戏状态状态= GameState.READY;' – vurp0 2014-02-01 18:35:18

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 
    }