gpt4 book ai didi

Java 计时器 Swing 精确到 60 fps

转载 作者:行者123 更新时间:2023-12-05 08:09:29 26 4
gpt4 key购买 nike

我在 JPanel 中有一个动画,它通过 javax.swing.Timer 更新自身。可以构造此计时器以具有必须为整数的毫秒延迟。如果我让 JPanel 每秒更新 60 次,我会将延迟设置为 1000/60 = ~16.6666。但是,这个延迟必须是一个整数,所以我可以选择向上或向下舍入。对于 16 毫秒的延迟,动画将以每秒 62.5 帧的速度更新。四舍五入到 17 毫秒的延迟将得到 58.824 的帧速率。

我怎样才能使帧速率刚好达到每秒 60 帧?

提前致谢。

最佳答案

我看到两个选项可以帮助您。他们最终以同样的方式实现了同样的事情,但代码或多或少是通用的。我还没有找到任何工具可以为您完成这项工作,因此它需要一些工作。

第一个选择是做这样的事情:

/**
* Called by the timer when the next iteration is due. Assume that
* this happens at the right moment.
*/
public void onTimerUpdate() {
updateAnimation();

// Compute the next point in time that corresponds to the
// frame rate you want.
long nextScheduledTimestamp = getNextTimestampInNanos();

long nanos = System.timeNanos();
timer.schedule(task, convertToMillis(nextScheduledTimestamp - nanos));
}

第二个选项是让您获取 java.util.Timer 的副本: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Timer.java

并重写特定于毫秒的位。在 OpenJDK 中的实现中没有任何内容表明其分辨率是特定于毫秒的,因此您应该能够将 Object.wait(millis) 调用替换为 Object.wait(millis, nanos): https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait(long,%20int)

有趣的文章,仅供娱乐:https://blogs.oracle.com/dholmes/entry/inside_the_hotspot_vm_clocks

关于Java 计时器 Swing 精确到 60 fps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36387853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com