2016-12-28 13 views
0

私の新しいゲームでは、ポイントを得るためにボタンを押す必要があります。プレーヤーは5秒以内にボタンを押す必要があります。時間がかかると、GameOverScreenが開きます。それ以外の場合は、カウントダウンが再開されます。私はgameover();メソッドをカウントダウンのfinish()メソッドに入れようとしましたが、finishメソッドが常に開始され、キャンセルされない可能性があります。それを行うためにカウントダウンを停止するにはどうすればよいですか?このようなカウントダウン後のアンドロイドオープン活動

public class GameScreen extends Activity { 
    public int score = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 
     Button count = (Button) findViewById(R.id.button1); 
     text = (TextView) this.findViewById(R.id.textView3); 
     tvscore = (TextView) findViewById(R.id.score); 

     timer(); 
    } 

    public void gameover() { 
     Intent intent = new Intent(this, GameOverScreen.class); 
     startActivity(intent); 
    } 

    public void onClick (View view) { 
     score++; 
     tvscore.setText(String.valueOf(score)); 
     timer(); 
    } 

    public void timer(){ 
     new CountDownTimer(5000, 10) { 
      public void onTick(long millisUntilFinished) { 
       text.setText(""+String.format("%02d:%03d", 
         TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), 
         TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)) 
         )); 
       if(animationRunning) { 
        cancel(); 
       } 
      } 
      public void onFinish() { 
       text.setText("Too slow."); 
       gameover(); 
      } 
     }.start(); 
    } 
} 
+0

私はあなたのカウントダウンタイマー – Anjali

答えて

2

はあなたが望むものを達成するために、シンプルで洗練された方法です。

グローバルレベルであなたのonCreateViewインサイド

CountDownTimer mCountDownTimer ; 

をCountDownTimerのオブジェクトを定義します。onClickので

mCountDownTimer = new CountDownTimer(5000, 10) { 
     public void onTick(long millisUntilFinished) { 
      text.setText(""+String.format("%02d:%03d", 
      TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), 
      TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished));   
      } 

     @Override 
     public void onFinish() { 
      text.setText("Too slow."); 
      gameover(); 
     } 
    }; 
mCountDownTimer.start(); 

を()

public void onClick (View view) 
    { 
     mCountDownTimer.cancel(); 
     score++; 
     tvscore.setText(String.valueOf(score)); 
     mCountDownTimer.start(); 

    } 
+0

ちょうど理解する:それは何らかの方法でタイマーを取り消しているのか、それとも私の問題で私がどのように役立つのか? –

+0

mCountDownTimer.cancel();を呼び出します。タイマーをキャンセルするので、onFinished()は呼び出されません。 –

+0

働いています、ありがとう –

0

更新あなたのタイマーコード:ここで

private boolean isTimerCanceled = false; 

public void timer(){ 
     new CountDownTimer(5000, 10) { 
      public void onTick(long millisUntilFinished) { 
       text.setText(""+String.format("%02d:%03d", 
         TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)), 
         TimeUnit.MILLISECONDS.toMillis(millisUntilFinished) - TimeUnit.SECONDS.toMillis(TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished)) 
         ));      
       if(animationRunning) 
       { 
        isTimerCanceled = true; 
        cancel(); 
       } else{ 
        isTimerCanceled = false; 
       }    
      } 
      public void onFinish() 
      { 
       if (!isTimerCanceled){ 
       text.setText("Too slow."); 
       gameover();  
       } 
      } 
     }.start();  
}   
+0

するための方法をキャンセル呼び出してみてくださいそれを試してみましょう、ありがとう! –

+0

私の問題は解決しません。とにかく 'gameover'メソッドを起動します。 –

+0

フラグを維持することなく達成できます。 –

関連する問題