[SFML 2.0] Jednakowe tempo gry
Ostatnio zmodyfikowano 2012-09-24 19:29
wojownik266 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Jednakowe tempo gry » 2012-09-24 12:45:58 Witam. Jak zrobić coś takiego w SFML 2.0 aby gra działała w jednakowym tempie na każdym komputerze? Przykład mile widziany. |
|
DejaVu |
» 2012-09-24 14:45:31 W tutorialu SFML 1.6 na ich stronie jest przykład. |
|
yoogi |
» 2012-09-24 15:02:14 Pobaw się czasem :) lub VSync |
|
AlfaLeporis |
» 2012-09-24 15:30:40 Proponuję pobawić się pętlą stałokrokową. Za jakiś czas opublikuję pełny kurs SFML2, a tym czasem daje wycinek z przykładowym kodem: sf::Clock clock;
float accumulator = 0;
float TIME_STEP = 0.03f;
while( window->isOpen() ) { accumulator += clock.restart().asSeconds(); input(); if( accumulator >= TIME_STEP ) { logic(); accumulator -= TIME_STEP; } draw(); window.display(); }
Ogólnie rzecz biorąc, zasada jest taka że aktualizujemy logikę co jakiś czas a nie tyle ile jest klatek, w tym przypadku będzie to ~30 razy na sekundę (dokładniej to 33.3(3)). Co każdy przebieg aktualizujemy czas w zmiennej akumulatora - jeżeli będzie on większy niż ten ustawiony w TIME_STEP - aktualizuje się logikę oraz resetuje się akumulator. Działa równie dobrze na szybkim i wolnym sprzęcie :) |
|
wojownik266 Temat założony przez niniejszego użytkownika |
» 2012-09-24 16:27:18 Czekam z niecierpliwością na pierwszą lekcje tego kursu. A tak przy okazji to z ilu lekcji będzie się on składał? Pytam z czystej ciekawości. |
|
anonim |
» 2012-09-24 16:36:05 Odnośnie kursu. Czy SFML2 różni się wiele od 1.6 (poza zmianą nazw funkcji)? |
|
hincu |
» 2012-09-24 17:02:05 sfml 2.0 jest wydajniejsze od 1.6, jest podzielona na wiecej klas ( co jest plusem ) innych roznic raczej nie ma
mozesz uzyc metody void setFramerateLimit (unsigned int fps); sluzy ona do przypisania maksymalnej liczby fps z timerami nie musisz sie bawic :P
if( TIME_STEP >= limitczasowy ) { Input(); logic(); Draw(); TIME_STEP.Reset(); // resetuje timer }
ten kod mi sie nie podoba... wystarczy wykonac taki kod |
|
anonim |
» 2012-09-24 17:20:51 Czyli jeśli ustawię SetFramerateLimit to nie muszę się martwic o to, żeby gra chodziła na wszystkich komputerach tak samo? |
|
« 1 » 2 |