Все още съм сравнително нов в 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);
}
}
person
priomsrb
schedule
16.08.2013