2014-01-19 2 views
0

Я использую таймер swing для моей анимации в japplet. У меня возникла проблема с пониманием того, как работает таймер.Я не знаю, почему таймер в моем коде делает анимацию дублировать ее repaint() location

Я придумал этот код (это небольшая часть):

Action actionListener2 = new AbstractAction() { 

      public void actionPerformed(ActionEvent actionEvent) { 
       timer = new Timer(500,this); 
       timer.start(); 
       System.out.println("S"); 
       p.moveSquare(p.SnakeHeadX,p.SnakeHeadY+p.SnakeHeadH); 
       p.eatBlueSquare(p.SnakeHeadX,p.SnakeHeadY); 

      } 
     }; 

ответ

3

Нет, не создать новый таймер внутри ActionListener, как будет многократно создавать много много таймеров. Вместо этого просто переместите свой квадрат внутри ActionListener Timer и вызовите repaint(). Вы читали учебник таймера Swing Timer? Если нет, я настоятельно призываю вас к Google и посмотрю.

2

Таймер Swing (экземпляр javax.swing.Timer (в справочной документации по API)) запускает одно или несколько событий действий после указанной задержки. Не путайте таймеры Swing с установкой таймера общего назначения, которая была добавлена ​​в пакет java.util в версии 1.3

Timer в основном поток java, который запускался после задержки или мгновенно и выполнял назначенную задачу.

Вы должны перенести свое создание таймера из функции, описанной выше.

Timer timer = new Timer(1000, new ActionListener() { 
       public void actionPerformed(ActionEvent e) 
       { 
        System.out.println("S"); 
        p.moveSquare(p.SnakeHeadX,p.SnakeHeadY+p.SnakeHeadH); 
        p.eatBlueSquare(p.SnakeHeadX,p.SnakeHeadY); 
       } 
      }); 
    timer.start(); 

для получения более подробной информации перейдите по http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

+0

СПАСИБО ЗА ПОДДЕРЖКУ !!!! – user3212504

Смежные вопросы