繁体   English   中英

Java Swing Timer循环速度变慢

[英]Java swing Timer loop slows down

因此,我正在尝试使用Java中的Swing创建一个小型游戏。 我创建的游戏循环使用javax.swing计时器。 此计时器(通常)每5毫秒调用一次循环。

Timer tm = new Timer(5, this);
tm.start();

@Override
public void actionPerformed(ActionEvent e) {
    game.tick();
    repaint();
    revalidate();
}

我的代码可能很沉重,因为它包含很多for循环,因此我并不奇怪这并不是每5毫秒一次地在循环中运行。 取而代之的是,它以稳定的160fps每秒流转,至少在我的计算机上如此。 当我在弟弟的计算机上尝试游戏时(较少的RAM),它最初以160fps的速度运行,但是大约2分钟后,帧数下降到了稳定的60fps。

我个人发现,在相同的时间间隔内帧下降这么多,并在其余时间保持稳定是很奇怪的。

如果有人遇到类似问题并且知道是什么原因引起的,请告诉我。 提前致谢。 〜Krikke

您应该使用Timer.scheduleAtFixedRate方法而不是构造函数参数。

从文档(重点是我的):

在固定速率执行中,相对于初始执行的计划执行时间来计划每个执行。 如果执行由于某种原因(例如垃圾回收或其他后台活动)而延迟,则将快速连续发生两个或更多执行以“追上”。 从长远来看,执行频率将恰好是指定时间段的倒数 (假设Object.wait(long)底层的系统时钟是准确的)。

如@HovercraftFullOfEels的评论中所述,您应该在Swing事件线程上进行任何Swing调用。 有关更多信息,请参见本教程

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM