2012-11-05 58 views
0

我開發一個與所有的東西,典型的Android遊戲它envolves:遊戲圈,渲染器,面板,...暫停或退出的的Android遊戲

的問題是,當我退出遊戲,它總是崩潰......我認爲這是因爲我沒有正確地停止遊戲循環,而是繼續。另外,當我「儘量減少」遊戲或者將手機切換到待機狀態時,我想暫停一下。

我應該在onPause和onDestroy中放置什麼?

我只有這個:

@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 

    super.surfaceDestroyed(holder); 

    //Stop game loop: 
    loop.setRunning(false); 

    boolean retry = true; 
    while (retry) 
    {   
     try 
     { 
      //gameLoop.join(); 
      loop.stop(); 
      retry = false; 
     } 
     catch (Exception e) 
     { 
      // try again shutting down the thread 
     } 
    } 
} 

但這是不夠的,它僅適用於退出。

謝謝!

+0

需要代碼和logcat堆棧跟蹤。 – Tim

+1

試着想像你是我。我所擁有的就是你輸入的文字。你會如何回答這個問題? – Simon

+0

我沒有這些功能的任何代碼。這就是爲什麼崩潰。我不知道如何正確地停止循環。我只有onSurfaceDestroy。 – Frion3L

回答

1

爲了確保您的應用程序的行爲「正常」(通常表示它的行爲方式與您希望的一樣),您應該在包含您的遊戲循環的活動中覆蓋onPause()onResume()方法。考慮到你沒有真正提供其他代碼,這是有道理的,這是你忘記實現的東西。

例如,這裏是一些抽象的僞代碼來實現自己的目標:

protected void onPause(){ 

    //Save the game state 
    //Pause the game loop 
    //Save any other data that need to be persistent throughout sessions 
} 

protected void onResume(){ 

    //Reinitialize game state 
    //Reinitialize any other persistent data 
    //Resume the game loop 
} 

這是可以理解的東西,如果你以前從來沒有開發的Android應用程序很容易被忽視。

有關Android活動狀態的更多說明,請參閱this圖片,摘自Android Activity文檔。

+0

我怎樣才能保存遊戲狀態?我的意思是,當我最小化遊戲時,所有東西都被破壞了:l我可以在哪裏保存它? – Frion3L

+0

這實際上取決於你的實現。您可以始終使用簡單的數據庫使數據持久化,甚至可以在'onPause()'調用的每次迭代期間將值寫入文件。然後,您可以在'onResume()'調用中讀取相應的文件。爲了尋求前一種選擇的幫助,研究SQLite數據庫(你可以開始[這裏](http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html)),爲後面的研究[ BufferredWriters](http://docs.oracle.com/javase/1.4.2/docs/api/java/io/BufferedWriter.html)將信息寫入文件。 – Squagem