2011-05-03 137 views

回答

0

我想,線程正在更新GUI。您可以使用布爾值來指示當前狀態是否已暫停。在線程循環中,您可以添加一個條件來檢查當前狀態是否已暫停。如果暫停,您可以使用繼續跳過循環。否則,執行整個代碼。

3

試試看ReplicaIsland的源代碼或LunarLander示例中的示例代碼。這兩個是起點的流行例子。

此外,請確保您瞭解線程是如何工作的,以及您是否真的想要暫停線程。另一種方法是在線程仍然運行時簡單地暫停繪圖/更新。像這樣的代碼可能是你要找的東西:

@Override 
public void run() 
{ 
    while (mRun) 
    { 
     Canvas c = null; 
     try 
     { 
      c = mSurfaceHolder.lockCanvas(null); 
      synchronized (mSurfaceHolder) 
      { 
       if (mMode == STATE_RUNNING) 
       { 
        updatePhysics(); 
       } 
       doDraw(c); 
      } 
     } finally { 
      // ... 
     } 
    } 
} 

這是LunarLander示例中run()函數的修改版本。

感興趣的主要問題是如果mMode == STATE_RUNNING,updatePhysics()函數只會被調用。只需更改mMode將導致物理停止更新並有效地暫停遊戲。

我認爲這或多或少是@vivek描述的。