Изпълнение само на определени рамки в 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