JavaFX AnimationTimer每秒执行60次以上的更新

时间:2018-10-28 16:23:57

标签: java javafx

JavaFX的AnimationTimer出现问题。经过研究后,看来其他人也有这个问题。

AnimationTimer每秒不播放60帧。我使用的是144hz监视器,因此刷新率是144hz,AnimationTimer现在约为143/144 fps。如果将刷新率设置为60hz,它将再次达到60 fps。

在运行Ubuntu的笔记本电脑上,更糟糕的是,AnimationTimer出于某种原因在其中以300-500 fps的速度运行。

有什么方法可以使AnimationTimer达到60 FPS,或者如果不可能,我如何在javafx中归档60 FPS循环。

2 个答案:

答案 0 :(得分:1)

有几个不同的主题,所以我鼓励任何到达这里的人继续寻找。

这个bug report似乎有用。

作为止步措施,我做了以下工作。 IDK是否真的“解决”了任何问题。似乎有可能通过handle()方法进行大量旋转,从而消耗CPU。

// instance variable
private long previousTimestamp;
private long nanoSecsPerFrame = Math.round(1.0/60 * 1e9);

// handle method
public void handle(long timeStamp)
{
    if (timeStamp - prevTimeStamp < nanoSecsPerFrame)
    {
        return;
    }
    prevTimeStamp = timeStamp;

    // your code
}

我在Ubuntu Desktop 18.04的存储库java-8-openjdk-amd64中遇到此问题。

AnimatinTimer在Windows 10上使用带有OpenJFX 11的OpenJDK 11或仅使用预模块化OpenJDX8都可以正常工作。我希望在Ubuntu上切换到模块化Java / JavaFX可以解决此问题。

答案 1 :(得分:0)

以防将来有人通过Google搜索找到该错误,而该错误仍未修复。

http://svanimpe.be/blog/game-loops-fx

这将帮助您以恒定帧速率运行游戏循环。