[英]Java Swing 'game loop' best practices
为了清楚起见,我正在寻找在Java中(使用Swing)实现“游戏循环”的最佳方法。
当前,我正在使用以下设置,并在JPanel
类中覆盖paintComponent()
来绘制如下内容:
public void run() {
while (running) {
panel.update();
panel.repaint();
try {
sleep(SLEEP_TIME);
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
此设置似乎可以很好地工作,但是移动形状和图像似乎有时会停滞一两个像素。 换句话说,运动并不像我希望的那样平稳。
我想知道是否有一种方法可以使游戏循环更有效, 即避免运动停顿?
使ScheduledExecutorService
Rate固定的一种简单方法是使用ScheduledExecutorService
。
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
panel.update();
panel.repaint();
}, 0, 16, TimeUnit.MILLISECONDS);
另一种方法是您自己执行此操作,方法是根据该过程所用的时间来计算睡眠时间。
public void run() {
long time = System.currentTimeMillis();
while (running) {
panel.update();
panel.repaint();
long sleep = 16 - (System.currentTimeMillis() - time);
time += 16;
try {
sleep(sleep);
} catch (Exception exception) {
exception.printStackTrace();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.