英文:
Stuck on using Java Swing Timer
问题
我已经在一个 JFrame 上的画布中创建了一个小矩形。我已经将这个类设为了单例模式(我知道有些人会说这不是一个好的做法,但我对此感到满意)。目前我只是在按下箭头键时使用 repaint() 方法。然而,我现在正在考虑使用 Swing 定时器来创建一个游戏循环。
我已经创建了一个名为 "GameLoop.java" 的类,并添加了以下代码。
public class GameLoop implements ActionListener {
Timer timer = new Timer(10, this);
public void actionPerformed(ActionEvent e) {
timer.start();
GameCanvas.getInstance().repaint();
}
}
然而,当按下箭头键时,这并没有对屏幕产生任何影响。我是不是漏掉了什么东西/做错了什么?
英文:
I have created a small rectangle in a canvas which is on a JFrame. I have made the class a singleton (I know some of you will say it's bad practice, but i'm fine with that). I am currently just using the repaint() method whenever an arrow key is pressed. However, I am now looking at making a Game loop with a swing timer.
I have created a class called "GameLoop.java" and added the following code.
public class GameLoop implements ActionListener {
Timer timer = new Timer(10, this);
public void actionPerformed(ActionEvent e) {
timer.start();
GameCanvas.getInstance().repaint();
}
}
This however, does nothing to the screen when an arrow is pressed. Is there something I am missing / doing wrong?
答案1
得分: 1
"actionPerformed(ActionEvent e)
" 只有在计时器启动后才会被调用,因此它不能用于启动计时器。<br/>
你需要在其他地方启动它。例如:
public class GameLoop implements ActionListener {
GameLoop() {
Timer timer = new Timer(10, this);
timer.start();
}
public void actionPerformed(ActionEvent e) {
GameCanvas.getInstance().repaint();
}
}
英文:
The actionPerformed(ActionEvent e)
is called only after the timer starts, so it can not be used to start the timer.<br/>
You need to start it elsewhere. For example:
public class GameLoop implements ActionListener {
GameLoop() {
Timer timer = new Timer(10, this);
timer.start();
}
public void actionPerformed(ActionEvent e) {
GameCanvas.getInstance().repaint();
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论