2012-07-13 63 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 
    }