Я создал небольшой прямоугольник на холсте, который находится в JFrame. Я сделал класс синглтоном (я знаю, что некоторые из вас скажут, что это плохая практика, но меня это устраивает). В настоящее время я просто использую метод repaint() всякий раз, когда нажимается клавиша со стрелкой. Однако сейчас я рассматриваю возможность создания игрового цикла с таймером свинга.
Я создал класс под названием «GameLoop.java» и добавил следующий код.
public class GameLoop implements ActionListener {
Timer timer = new Timer(10, this);
public void actionPerformed(ActionEvent e) {
timer.start();
GameCanvas.getInstance().repaint();
}
}
Это, однако, ничего не делает с экраном при нажатии стрелки. Есть ли что-то, что я упускаю/делаю неправильно?
1 ответ
actionPerformed(ActionEvent e)
вызывается только после запуска таймера, поэтому его нельзя использовать для запуска таймера.
Вам нужно начать его в другом месте. Например:
public class GameLoop implements ActionListener {
GameLoop() {
Timer timer = new Timer(10, this);
timer.start();
}
public void actionPerformed(ActionEvent e) {
GameCanvas.getInstance().repaint();
}
}
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
GameCanvas
меняет то, что рисуется?Timer
не запускается автоматически... и вам не следует вызыватьstart
в методеactionPerformed
. Вместо этого вызовитеstart
как часть фазы инициализации/настройки. «Игровой цикл» также должен принимать любые входные состояния и изменять игровое состояние до того, как оно будет отрисовано.