Выполнять только определенные кадры в SFML

Я все еще новичок в SFML, и сейчас я пытаюсь сделать простую игру с прокруткой. У меня есть большинство основных вещей, но я начинаю замечать, что экран выглядит медленным. Я использую функцию window.setFrameRateLimit, чтобы результат перемещения был одинаковым на всех компьютерах, но во время выполнения программы возникают случайные скачки задержки. Я думаю, что это происходит из-за ограничения частоты кадров и из-за того, как он это делает. Есть ли другой лучший способ запускать программу только в определенное время? В идеале он должен двигаться с той же скоростью и на более медленных компьютерах.


person Jqmfg    schedule 15.08.2013    source источник


Ответы (1)


Кажется, пики задержки setFrameRateLimit были исправлены в SFML 2.0. Если вы не можете обновиться до SFML 2.0, вы можете добавить свой собственный ограничитель частоты кадров. Это включает в себя добавление sleep() к вашему игровому циклу. Например:

while(App.IsOpened()) {
   float time = Clock.GetElapsedTime();

   // update game
   // draw game

   float timeToWait = (1.0 / FRAMES_PER_SECOND) - (Clock.GetElapsedTime() - time);
   if(timeToWait > 0) {
       sleep(timeToWait * 1000);
   }
}
person priomsrb    schedule 16.08.2013