2016-04-02 8 views
0

Runnableインターフェイスを実装しているクラスの属性を変更することは可能ですか?時間の経過とともにRunnableクラス属性を変更する

Runnableインターフェイスを実装したGamePanelクラスでゲームループを作成しました。 は、しかし、私は予想通り、それはこのような論理的属性変更することは不可能である:私は上をクリックすると

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

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

}; 

:私のMainActivityで

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(); 
    } 
} 

を、私は簡単なボタンに添付リスナーを持っていますブール値は変更されますが、それを1秒間クリックするとブール値は変更されません。

+0

あなたはいつも_isPaused値を設定していますが、onClickではこれをしないでください。 _gamePanel.setPause(!_ gamePanel.getPause()); – jonathanrz

+0

私はコードを編集しました。それはペーストミスでした。 私は持っています: _gamePanel.setPause(!_ gamePanel.getPause()); これは動作していません –

答えて

1

ブール値を変更することはできますが、ベストプラクティスに従わないことは私の心の中にあります。

現在の問題は、ブール値をtrueに変更してもはや描画しないようにすると、whileループを終了して実行可能ファイルがもう実行されないことです。

編集: コードを明確にするためにAtomicBooleanを使用することをお勧めします。

+0

私はそのような間違いを投稿するのに疲れているかもしれないと思います。ありがとうございます –

+0

私たちすべてに起こります:) 多分あなたはそれらを持っているだけでそれらを含めていないが、ヒントはいくつかのログを持っているだろう。たとえば、次の場合: 1)実行可能ファイルを入力する 2)実行可能ファイルを終了する –

関連する問題