Как я могу ограничить частоту кадров при 60fps? - PullRequest
0 голосов
/ 10 апреля 2011

Хорошо, поэтому я пытаюсь ограничить частоту кадров до 60 кадров в секунду, но метод, который я использую, замедляет его до 40.

#define TICK_INTERVAL 30

Uint32 TimeLeft(void){
    static Uint32 next_time = 0;
    Uint32 now;

    now = SDL_GetTicks();
    if ( next_time <= now ) {
        next_time = now+TICK_INTERVAL;
        return(0);
    }
    return(next_time-now);
}

Затем я называю это так: SDL_Delay(TimeLeft());

Как я могу ограничить частоту кадров, не выходя за ее пределы или не слишком быстро?

1 Ответ

3 голосов
/ 10 апреля 2011

Вам необходимо записать время до рисования текущего кадра, а затем задержать соответствующую величину с , затем .

Например, некоторый псевдокод для этого будет

markedTime = currentTime();
drawFrame(); 
delayFrom(markedTime, 1/60);

знакВремя - это время, записанное до вызова drawFrame (). delayFrom () - это функция, которая задерживает заданное время, а не «сейчас». 1/60 - время задержки первого аргумента в секундах.

...