gpt4 book ai didi

java - 从java中的帧率代码得到奇怪的结果

转载 作者:行者123 更新时间:2023-12-01 16:08:50 25 4
gpt4 key购买 nike

我试图将游戏保持在 60 fps,但我从代码中得到了奇怪的结果,例如“2-8000 fps”,为什么这不保持在 60?

public void run(boolean fullscreen) {
this.fullscreen = fullscreen;
try {
long lastFrame = 0;
long frames = 0;

init();
while (!done) {
frames++;
long startTime = System.nanoTime() / 1000000;
try
{
System.out.println("framerate: " + ((System.nanoTime() / 1000000 - startTime) / frames ) );

// 123456: 6 zeros => 16ms
long nsToSleep = 17000000 - (System.nanoTime() - lastFrame);
System.out.println("ns: " + nsToSleep);
lastFrame = System.nanoTime();

if(nsToSleep > 0)
{
System.out.println("ns2: " + (nsToSleep/1000));
System.out.println("ns3: " + (nsToSleep%1000));
Thread.sleep(nsToSleep/17000000, (int)(nsToSleep % 1000));
}
else
{
Thread.yield(); // Only necessary if you want to guarantee that
// the thread yields the CPU between every frame
}



}

catch(Exception e){
e.printStackTrace();
}


mainloop();
render();
Display.update();
}
cleanup();
}
catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
}

最佳答案

Thread.sleep(nsToSleep/17000000, ...);

应该是

Thread.sleep(nsToSleep/1000000, nsToSleep%1000000);

当您将纳秒转换为毫秒时。

此外,正如 diciu 在对您的问题的评论中指出的那样,您应该将开始时间的计算移到循环之外。

我还没有对此进行过测试,所以我不确定这是否就是您修复它所需的全部内容,但快速浏览一下您的代码似乎会发现这些问题。

关于java - 从java中的帧率代码得到奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1960769/

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