luk*_*kes 0 java performance swing timer delay
我需要一个计时器用于我正在构建的游戏,它基本上做的是启动一个事件,当我点击游戏时每秒移动并对象一个正方形.现在要么我让游戏顺其自然(游戏结束或对象移出界限)或再次按下游戏,计时器似乎会触发对象比以前更快地移动等等,每次都越来越快我重新启动时间.
private void playButtonMouseClicked(java.awt.event.MouseEvent evt) {
/*code*/
timer = new Timer(timerSpeed, new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
/*code that ends with something that calls timer.stop()*/
}
}
});
if(timer.isRunning()) //in case I don't let the game stop the timer
timer.stop();
timer.start();
}
Run Code Online (Sandbox Code Playgroud)
我检查过timer.getDelay(),延迟没有改变,它保持不变,但我可以看到每次箭头移动越来越快.我正在使用jPanels和带有和图标的标签来显示网格和移动对象.
有任何想法吗?
但我每次都能看到箭头移动越来越快.
这告诉我你有多个计时器在执行.
每次单击按钮时,您当前的代码都会创建一个新的Timer.
的timer.isRunning(),因为你刚刚创建,将不会运行,因为你还没有开始这又一个新的定时器检查永远不会为真.
所以你的旧计时器可能仍在运行,但由于你不再有它的引用,你无法阻止它.
解决方案:
每次单击按钮时都不要创建新的Timer对象.应该在类的构造函数中创建Timer对象.然后根据需要启动/停止定时器