2013-08-25 48 views
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中試過這個。

+1

SDL_Delay無法按照您的方式工作。它不夠精確(具有10毫秒的精度),因此以這種方式獲得每秒所需的幀數是不可能的。我們vsync代替。另一件事是當控制檯可見時,打印到標準錯誤/標準輸出速度很慢。如果您在按鍵時打印某些東西,或者按某個鍵不斷增加正在打印的文本數量,則遊戲速度會減慢。 – SigTerm

+0

我不知道關於SDL_Delay。此外,整個程序中唯一打印的是fps,每秒只發生一次。我會嘗試vsync,看看會發生什麼。 – Biostreem

+0

使用vsync修復了這個問題,並且稍微平滑了動畫。謝謝您的幫助! – Biostreem

回答

1

SDL_Delay無法按照您的方式工作。它不夠精確(具有10毫秒的精度),因此以這種方式獲得每秒所需的幀數是不可能的。我們vsync代替。另一件事是當控制檯可見時,打印到標準錯誤/標準輸出速度很慢。如果您在按下鍵時打印某些東西,或者按某個按鍵以增加正在打印的文本數量,則遊戲速度會減慢。