2016-12-28 122 views
0

在我的新遊戲中,你必須按下按鈕才能獲得積分。玩家必須在5秒內按下按鈕 - 如果需要更多時間,GameOverScreen將被打開。否則倒計時應該重新開始。我試圖將gameover();方法放在倒計時的finish()方法中,但似乎有可能終止方法總是開始並且不會被取消。我怎樣才能停止倒計時呢?android-倒計時後打開活動

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

這裏是爲了實現你想要的簡單和複雜的方式。

在全球層面

CountDownTimer mCountDownTimer ; 

定義CountDownTimer的對象裏面你onCreateView:

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

在的onClick()

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

可以實現而無需維護國旗。 –