зачем запускать таймер в SDL при настройке FPS? - PullRequest
0 голосов
/ 19 декабря 2010

это относится к этой странице учебника из набора учебников SDL от lazyfoo.Там он сначала запускает таймер, чтобы вычислить, сколько времени должен оставаться в живых каждый кадр, прежде чем он обновится.Он делает это, используя следующее

if( ( cap == true ) && ( fps.get_ticks() < 1000 / FRAMES_PER_SECOND ) ) { 
 //Sleep the remaining frame time 
 SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() ); 
} 

. Хотя я обнаружил, что fps.get_ticks () всегда возвращает 0 (??), и, следовательно, разве вышеприведенное не нужно (?), Не можем ли мы просто полностьюпропустите таймер и просто задержите на 1000 / FPS.

Я пробовал оба способа ниже, и оба дают мне одно и то же.Чего мне здесь не хватает, зачем нам таймер?

1009 *

Ответы [ 2 ]

1 голос
/ 19 декабря 2010

Допустим, вы хотите 50 кадров в секунду.

1000 миллисекунд / 50 = задержка 20 миллисекунд.

Но требуется время, чтобы отрендерить, вычислить физику, ИИ, что бы вы ни делали. Допустим, все, что я написал, занимает 10 миллисекунд. У вас 1000 миллисекунд / (задержка 20 мс + 10 мс все остальное) = 33,3 кадра в секунду Вам нужно вычесть это 10 мс из задержки.

0 голосов
/ 19 декабря 2010

Я не эксперт, но он делает то, что: как только ваш основной цикл, который запускает ваше приложение sdl, будет завершен (рисование блиттинга и все такое), время, возможно, прошло немного, пока вы делали свои вещи, например, еслирисование вашего кадра заняло 10 мс, вам придется подождать (1000 / FPS) - 10 мс до следующего кадра, в противном случае ваш кадр будет длиться слишком долго.

...