0
我想在C++和SDL2中製作一個簡單的基於磁貼的平臺變形器。我的幀速率保持在59-60 fps,但是當我開始按住一個鍵時,它會損失大約10 fps。即使我不調用更新或檢索關鍵狀態,也會發生這種情況。這是我的遊戲循環內的代碼:C++ SDL幀速率下降,當按住鍵時
//keys = (Uint8 *)SDL_GetKeyboardState(NULL);
elapsed = SDL_GetTicks() - current;
current += elapsed;
timeSinceSecond += elapsed;
//update(keys, elapsed/1000.0);
draw();
frames++;
if(timeSinceSecond >= 1000) {
timeSinceSecond = 0;
cout << frames << endl;
frames = 0;
}
next = SDL_GetTicks();
if(next - current < 1000.0/framerate) {
SDL_Delay(1000.0/framerate - (next - current));
}
上爲什麼發生這種情況的任何想法?難道這是SDL2的問題嗎?我沒有在SDL 1.2中試過這個。
SDL_Delay無法按照您的方式工作。它不夠精確(具有10毫秒的精度),因此以這種方式獲得每秒所需的幀數是不可能的。我們vsync代替。另一件事是當控制檯可見時,打印到標準錯誤/標準輸出速度很慢。如果您在按鍵時打印某些東西,或者按某個鍵不斷增加正在打印的文本數量,則遊戲速度會減慢。 – SigTerm
我不知道關於SDL_Delay。此外,整個程序中唯一打印的是fps,每秒只發生一次。我會嘗試vsync,看看會發生什麼。 – Biostreem
使用vsync修復了這個問題,並且稍微平滑了動畫。謝謝您的幫助! – Biostreem