2012-03-18 2 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 일 때 타이머가 중지되어야합니다. 자, 타이머를 계속해서 시작한다고 생각합니다 ... 그리고 final이 아니기 때문에 int 카운트 다운 int를 표시하기 위해 int "i"를 사용할 수 없습니까?

도움을 주셔서 감사합니다.

답변

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

덕분에, 작동 .. 그것을 시도. 어떻게 구현할 것인가? 항상 실행 가능한 인스턴스는 하나 뿐이다. 현재 구현에서는 객체가 영역에 들어가기 때문에 실행 가능 파일이 4 ~ 5 회 실행됩니다. 영역 밖으로 객체를 드래그하면 count를 false로 설정하여 4 또는 5 개의 인스턴스를 모두 중지합니다. 하나만 시작하는 방법에 대한 조언이 있으십니까? –

+0

runnable가 이미 실행 중인지를 나타내는 글로벌 부울 변수를 만듭니다. 예 : if (! isRunning) {// 새로운 실행 가능 파일을 시작하면 isRunning = true; 실행 가능한 때 그의 일 스위치는 거짓에 실행하고있다. –

+0

Woops .. ofcourse. 감사. count 부울을 사용할 수도 있습니다. 이봐. –