2013-05-15 8 views
0

타이머가 실행될 때마다 타이머 내부에서 실행되는 코드가 더 빠르게 실행됩니다. 왜 이런 일이 일어나는 걸까요?Java 타이머가 모든 실행 속도 향상

이 코드는 본질적으로 프레임을 가로 지르는 레이블 (이미지 보유)을 이동합니다. 매번 실행하면 이미지가 더 빨리 이동합니다.

enter image description here

제 실행에
if (Player.direction == "west") { 
      timerWest.start(); 
      isCasting = true; 
      new Magic("westmagic.gif"); 

      timerWest.addActionListener(new ActionListener() { 
       public void actionPerformed(ActionEvent e) { 
        int x = Frame.fireMagicLabel.getX(); 
        int y = Frame.fireMagicLabel.getY(); 
        Frame.fireMagicLabel.setLocation(x - 1, y); 
        LiveUpdating.updateSpell(); 
        CheckHits.spellHit(); 
        Frame.frame.repaint(); 

        if (Frame.fireMagicLabel.getX() <= tempWest) { 
         timerWest.stop(); 
         new Magic(""); 
         Frame.frame.repaint(); 
         Frame.fireMagicLabel.setLocation(
           Frame.redHealthLabel.getX(), 
           Frame.redHealthLabel.getX()); 
         isCasting = false; 
        } 
       } 
      }); 
      Frame.frame.repaint(); 

     } 

는 타이머 배속을 행한다. 그런 다음 다음 실행은 더 빠르고 더 빠르고 더 빠르게 수행됩니다.

+1

나는 한 번만 액션 리스너를 추가해야한다고 생각한다. – happymeal

+0

@happymeal : 대답 해주세요. –

+2

또한, '=='를 사용하여 문자열을 비교하지 말고'equals (...) '메서드를 사용하십시오. –

답변

2

액션 리스너를 한 번만 추가해야한다고 생각합니다.

+0

나는 이것을 시도했지만 액션 리스너를 한 번 추가하는 방법을 알 수는 없지만 여러 번 호출한다. – Nic

+0

코드 삭제 후 제거 시도 : timerWest.removeActionListener (this); – Nic

+0

해결되었습니다! 정확히 한 번 호출하지 않았지만 작동 제거 : – Nic

0

Ther actionlistener는 한 번만 추가하면됩니다.

또한 수정하지 않으면 코드를 게시하지 않은 코드에서 속도가 적용됩니다. 재설정되지 않고 추가 될 수 있으므로 속도가 두 배가됩니다.

+0

동작을 추가하지 않고 타이머에 청취자를 어떻게 추가합니까? 예를 보여줄 수 있습니까? – Nic