2016-04-10 21 views
0

私のコードにはカウントダウンタイマーがあります。このカウントダウンタイマーは、ゲーム中に得たユーザーのスコアに達するまで、10msごとにチェックを入れ、テキストビューの数字を1ずつ上げます。Androidのカウントダウンタイマーが正しく実行されていません

値の半分にも達しません。ここに私のコードです:

new CountDownTimer(lastScore*10, 10) { 

     public void onTick(long millisUntilFinished) { 
      tempScore++; 

      TextView lg = (TextView)findViewById(R.id.lastgame); 
      lg.setText("LAST SCORE: " + String.valueOf(tempScore)); 
      lg.setTypeface(eightBitFont); 
     } 

     public void onFinish() { 

     } 

    }.start(); 

Lastscoreはゲーム中に得た得点です。 tempScoreは、テキストビューを変更するために新しい値を保存するために使用されます。

EDIT:ユーザーが10msがあまりにも細かい解像度である可能性があることを指摘しました。 解像度が10msの場合、lastScoreの値は115で、tempScoreの値は46にしかなりませんでした.30msに変更すると108にまで上がり、50に変更するとさらに近づきました。私はそれを正しい値にするために100ミリ秒の値を使用しなければならないようです。しかし、それは私が達成したいもののために少し遅いです。私が達成しようとしていることをするためのより良い方法はありますか?

+0

"lastScore"値は確認しましたか? –

+0

はい。タイマーを使用せずに3行のテキストビューコードを使用し、lastScoreに値を設定すると正しい値が表示されます –

+0

こんにちは@Josh、正確にlastScoreの値は何ですか? CountDownTimerコンストラクタは、カウントダウンが実行される時間をミリ秒単位で時間の最初のパラメータとして受け取ります。 – velval

答えて

0

あなたがカウントダウンをくすぐるたびに、高価なメソッドfindViewByIdを呼び出します。 タイマーの外に割り当てる必要があります。 コードは次のようになります。

TextView lg = (TextView)findViewById(R.id.lastgame); 

new CountDownTimer(lastScore*10, 10*1000) { // set to be called each 10 seconds 

     public void onTick(long millisUntilFinished) { 
      tempScore++; 
      lg.setText("LAST SCORE: " + String.valueOf(tempScore)); 

     } 

     public void onFinish() { 

     } 

    }.start(); 
関連する問題