2016-04-02 41 views
0

是否有可能隨時間修改實現Runnable接口的類中的屬性?在整個時間內修改Runnable類屬性

我在實現Runnable接口的GamePanel類中創建了一個遊戲循環。 然而,正如我所料,這是不可能修改布爾屬性是這樣的:

public class GamePanel extends SurfaceView implements Runnable { 
    private volatile boolean _isPaused; 
    public synchronized void setPause(boolean b) { 
     _isPaused = b; 
    } 

    public synchronized boolean getPause() { 
     return _isPaused; 
    } 

    @Override 
    public void run() { 

     while (!_isPaused) 
      draw(); 
    } 

    public void draw() 
    { 
     if (_isPaused) 
      drawPauseScreen(); 
     else 
      drawGameScreen(); 
    } 
} 

在我的MainActivity,我有連接到一個簡單的按鈕監聽器:

private View.OnClickListener buttonPauseListener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     _gamePanel.setPause(!_gamePanel.getPause()); 
    } 

}; 

當我點擊暫停按鈕,布爾值被改變,但是一秒鐘點擊它不會改變布爾值。

+0

你總是設置_isPaused值,在onClick你不應該這樣做? _gamePanel.setPause(!_ gamePanel.getPause()); – jonathanrz

+0

我編輯了代碼,這是一個粘貼錯誤。 我有: _gamePanel.setPause(!_ gamePanel.getPause()); ,這是行不通的 –

回答

1

您可以按照您的操作更改布爾值,但在我看來,它並不遵循最佳實踐。

您目前的問題是您退出while循環,因此runnable不再運行,只要您將布爾值更改爲true,以便它不再繪製。

編輯: 我會推薦使用AtomicBoolean代替,以使代碼更清晰。

+0

我想我可能會很累,發佈這樣一個愚蠢的錯誤。謝謝 –

+0

發生在我們所有:) 也許你有他們,只是不包括他們,但小費將有一些日誌記錄。例如,當您: 1)輸入可運行的 2)退出可運行 –