2014-02-21 1 views
-3

게임에 타이머가 필요합니다 ... 운 좋게도 많이 찾았습니다.자바 타이머가 필요합니다

도와주세요.

// code not compiled nor tested. It was typed free-hand. 
// so it was not meant to be copy, pasted and used, but rather to show you 
// the idea. 
public void mouseClicked(MouseEvent e) { 
    mouseX = e.getX(); 
    mouseY = e.getY(); 

    // don't use if (shot == false). Instead do: 
    if (!shot) { 
    Ink = 0; 
    } 

    // likewise, no need to use if (ready == true). Instead do: 
    if (ready) { 
    shot = true; 

    // turn off your ability to shoot here by setting a boolean. 
    ableToShoot = false; 
    // start a Swing Timer that does not repeat 
    // in the Timer turn back on the ability to shoot by setting a boolean 
    Timer swingTimer = new Timer(TIMER_DELAY_TIME, new ActionListener() { 
     public void actionPerformed(ActionEvent evt) { 
     // allow shots here 
     ableToShoot = true; 
     } 
    }); 
    swingTimer.setRepeats(false); 
    swingTimer.start(); 
    } 
} 

참고 : 스윙 타이머를 사용하여 다시

public void mouseClicked(MouseEvent e) { 

    mouseX = e.getX(); 
    mouseY = e.getY(); 

    if(shot == false){ 
     Ink = 0; 
    } 

    if(ready == true){ 
    shot = true; 
     // I need a timer here to wait a second and then stop shooting. 
    } 

} 
+1

: 개선 Timer'과 행운을 스윙 '에 대한 검색. 튜토리얼을 확인한 후에도 도움이 필요하다면, 타이머를 사용하려는 대상과 코드가 작동하지 않는 방법에 대해 자세히 알려주십시오. –

+0

@HovercraftFullOfEels 나중에 보았습니다. 나는 코멘트를 삭제했다. –

답변

3

:

이 내 마우스 이벤트

  • 당신을 데려 가고 싶다는하지 않는 Thread.sleep(...)를 사용하지 마십시오 전체 GUI가 잠자기 상태가되어 Swing 이벤트 스레드를 잠자기 상태로 만듭니다.
  • java.util.Timer를 사용하지 마십시오. 스윙의 스레딩 모델은 거의 모든 스윙 호출이 스윙 이벤트 스레드에서 이루어 지도록 지시합니다. Swing Timer는 타이머의 모든 호출이 EDT, Swing 이벤트 스레드에서 호출되는지 확인하기 위해이 작업을 수행하도록 작성되었습니다. java.util.Timer는이 작업을 수행하지 않으므로 스레드 버그를 디버그하는 것이 매우 어렵습니다. 이는 최악의 버그입니다.
  • The Swing Timer Tutorial link. 영업 이익으로
  • The Swing event threading model tutorial link
+0

감사합니다! 그러나 문제는 TIMER_DELAY_TIME, (상수 생성 TIMER_DELAY_TIME ...) – user2975915

+0

@user2975915와 같습니다. 그런 다음 상수를 작성하십시오. 뭐가 문제 야? –

관련 문제