В настоящее время я делаю игру, в которой я хотел бы ограничить количество кадров в секунду, но у меня проблемы с этим. Вот что я делаю:Ограничение FPS в C++
Я получаю DeltaTime с помощью этого метода, который выполняется каждый кадр:
void Time::calc_deltaTime() {
double currentFrame = glfwGetTime();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
}
DeltaTime оказывает значение, я бы ожидать (около 0,012 .... 0,016 ...)
и чем я использую DeltaTime задержать кадр с помощью функции сна окна, как это:
void Time::limitToMAXFPS() {
if(1.0/MAXFPS > deltaTime)
Sleep((1.0/MAXFPS - deltaTime) * 1000.0);
}
MAXFPS равно 60, и я умножив на 1000, чтобы преобразовать SECO nds до миллисекунд. Хотя все, кажется, правильно я подоконник, имеющий более чем 60 кадров в секунду (я получаю около 72 кадров в секунду)
Я также попробовал этот метод, используя в то время как цикл:
void Time::limitToMAXFPS() {
double diff = 1.0/MAXFPS - deltaTime;
if(diff > 0) {
double t = glfwGetTime();
while(glfwGetTime() - t < diff) { }
}
}
Но до сих пор я получаю больше 60 кадров в секунду, я все еще получаю около 72 кадров в секунду. Я делаю что-то неправильно или есть лучший способ сделать это?
Как вы рассчитываете текущие fps? – SingerOfTheFall
Я бы лично написал выражение 'Sleep' следующим образом:' Sleep (1000/MAXFPS - deltaTime * 1000) ', но это не должно вести себя по-другому. –
@ AlgirdasPreidžius: Что, если 'MAXFPS' является целым типом? – IInspectable