坚持使用 Java Swing Timer
Posted
技术标签:
【中文标题】坚持使用 Java Swing Timer【英文标题】:Stuck on using Java Swing Timer 【发布时间】:2020-04-08 23:43:59 【问题描述】:我在 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();
但是,当按下箭头时,这对屏幕没有任何影响。我有什么遗漏/做错了吗?
【问题讨论】:
我们需要查看实际更新的内容以告诉您想要的是错误的。GameCanvas
如何改变正在绘制的内容?
Swing 也不是游戏类型编程的好选择,但如果你做额外的工作,它似乎是可能的。这是血腥的细节:pavelfatin.com/low-latency-painting-in-awt-and-swing
你也可以用其他词搜索“java swing pipeline”得到好的信息:docs.oracle.com/javase/10/troubleshoot/…
基本上,你的问题是,Timer
不会自动启动......而且你不应该在actionPerformed
方法中调用start
。相反,调用start
作为一些初始化/设置阶段的一部分。 “游戏循环”还应该接受任何输入状态并在绘制之前修改游戏状态
【参考方案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 Swing Timer的主要内容,如果未能解决你的问题,请参考以下文章