2013-08-15 3 views
1

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

ответ

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); 
    } 
} 
Смежные вопросы