繁体   English   中英

Java Swing“游戏循环”最佳实践

[英]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.

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