2012-03-18 10 views
0

3から0までカウントダウンするユーザーにタイマーを表示しようとしています。このタイマーは、ユーザーが特定の位置にオブジェクトをドラッグして停止する必要がある場合に表示する必要がありますユーザーがその位置からオブジェクトをドラッグするとリセットされます)。特定の範囲内のオブジェクト位置のカウントダウン

今のところ、私はLog.dと一緒に作業しています。これは実際のタイマーの表示です。

これまでのところ、私が持っている(非動作するコード):GameManagerで

public void setX(float x) { 
     isCheckOut = false;    
    // if basket is further than slotmargin 
    if (x + width/2 > SlotManager.SlotmarginX) { 
     // if basket is NOT in CheckOut area  
     if (this.Y < MainGamePanel.height - 80 - height/2){ 
      x = SlotManager.SlotmarginX - width/2; 

     } else { 
      // if basket IS in CheckOut area 
      x = MainGamePanel.width - width/2; 
      isCheckOut = true; 
      GameManager.CheckOut(); 
     } 
     } 

    this.X = x; 
} 

そして、:

public static void CheckOut() { 

    Thread t = new Thread(new Runnable() { 
     public void run() { 
      while (basket.isCheckOut == true){ 

       for (int i=3;i>3;i--){ 
        final Handler handler = new Handler(); 
        Timer t = new Timer(); 
        t.schedule(new TimerTask() { 
          public void run() { 
            handler.post(new Runnable() { 
              public void run() { 
               Log.d("", "Countdown " + i); 
              } 
            }); 
          } 
        }, 2000); 

       } 

      } 
     } 
    }); 
    t.start();  
} 

私はどこかに取得していますように感じることができますが、」ループタイマーの組み合わせの周りに私の頭をラップします。 isCheckOut == falseのときにタイマーを停止する必要があります。今、私はタイマーを何度もやり直すことを考えています...そして、最終的なものではないので、int "i"を使って現在のカウントダウンintを表示することはできません。

非常に感謝しています!

答えて

1

より良い使用このアプローチは:

final int delayMillis = 1000; 

final boolean count = true; 

final Handler handler = new Handler(); 

final Runnable runnable = new Runnable() 
{ 

    @Override 
    public void run() 
    { 

     // your code 

     if (count) // stop timer when count is false 
     { 
      handler.postDelayed(runnable, delayMillis); 
     } 

    } 
}; 

タイマーの使用を開始するには:

handler.postDelayed(runnable, delayMillis); 
+0

おかげで、それが動作する...それを試してみました。どのように私はそれを実装するのですか?実行可能なインスタンスは常に1つしかありません。私の現在の実装では、オブジェクトが領域に入っているため、実行可能ファイルは4〜5回実行されています。領域の外側にオブジェクトをドラッグすると、カウントがfalseに設定され、4つまたは5つのインスタンスがすべて停止します。ちょうど1つのインスタンスを開始する方法についてのアドバイスはありますか? –

+0

実行可能ファイルがすでに実行中かどうかを示すグローバルブール変数を作成します。例:if(!isRunning){//新しい実行可能ファイルを開始する、isRunning = true;実行可能なときに彼の仕事の切り替えは偽に実行されています –

+0

もちろんです。ありがとう。私はカウントブール値を使用することもできます。ダー。 –