gpt4 book ai didi

c++ - 在 C++ 中限制 FPS

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:05 25 4
gpt4 key购买 nike

我目前正在制作一款游戏,我想在其中限制每秒的帧数,但我遇到了问题。这是我正在做的:

我通过每帧执行的方法获取 deltaTime:

void Time::calc_deltaTime() {
double currentFrame = glfwGetTime();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
}

deltaTime 具有我期望的值(大约 0.012.... 到 0.016...)

然后我使用 deltaTime 通过 sleep 窗口函数延迟帧,如下所示:

void Time::limitToMAXFPS() {

if(1.0 / MAXFPS > deltaTime)
Sleep((1.0 / MAXFPS - deltaTime) * 1000.0);
}

MAXFPS 等于 60,我乘以 1000 以将秒转换为毫秒。虽然一切看起来都是正确的,但我仍然有超过 60 fps(我得到大约 72 fps)

我也用 while 循环试过这个方法:

void Time::limitToMAXFPS() {

double diff = 1.0 / MAXFPS - deltaTime;

if(diff > 0) {

double t = glfwGetTime( );

while(glfwGetTime( ) - t < diff) { }

}

}

但我仍然获得超过 60 fps,我仍然获得大约 72 fps...我做错了什么或者有更好的方法吗?

最佳答案

将周期返回给 CPU 有多重要?对我来说,使用 sleep 似乎是个坏主意。如果我错了,请有人纠正我,但我认为应该避免 sleep 功能。

为什么不简单地使用一个无限循环,如果超过一定的时间间隔就会执行。尝试:

const double maxFPS = 60.0;
const double maxPeriod = 1.0 / maxFPS;

// approx ~ 16.666 ms

bool running = true;
double lastTime = 0.0;

while( running ) {
double time = glfwGetTime();
double deltaTime = time - lastTime;

if( deltaTime >= maxPeriod ) {
lastTime = time;
// code here gets called with max FPS
}
}

上次我使用 GLFW 时,它似乎自行限制为 60 fps。如果您正在做任何面向高性能的事情(游戏或 3D 图形),请避免任何 sleep ,除非您想使用多线程。

关于c++ - 在 C++ 中限制 FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41742142/

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