Sollte eine Spieleschleife auf festen oder variablen Zeitschritten basieren? Ist man immer überlegen oder variiert die richtige Wahl je nach Spiel?
Variabler Zeitschritt
Physik-Aktualisierungen werden als Argument "Seit der letzten Aktualisierung verstrichene Zeit" übergeben und sind daher von der Framerate abhängig. Dies kann bedeuten, Berechnungen durchzuführen als position += distancePerSecond * timeElapsed
.
Vorteile : glatt, einfacher zu codieren
Nachteile : nicht deterministisch, bei sehr kleinen oder großen Schritten unvorhersehbar
deWiTTERS Beispiel:
while( game_is_running ) {
prev_frame_tick = curr_frame_tick;
curr_frame_tick = GetTickCount();
update( curr_frame_tick - prev_frame_tick );
render();
}
Fester Zeitschritt
Aktualisierungen akzeptieren möglicherweise nicht einmal eine "verstrichene Zeit", da davon ausgegangen wird, dass jede Aktualisierung für einen festgelegten Zeitraum durchgeführt wird. Berechnungen können wie folgt durchgeführt werden position += distancePerUpdate
. Das Beispiel enthält eine Interpolation während des Renderns.
Vorteile : vorhersehbar, deterministisch (einfacher zu vernetzen, zu synchronisieren?), Klarerer Berechnungscode
Nachteile : nicht synchronisiert, um die V-Synchronisation zu überwachen (verursacht unruhige Grafiken, sofern Sie nicht interpolieren), begrenzte maximale Bildrate (sofern Sie nicht interpolieren) variable Zeitschritte annehmen (wie Pyglet oder Flixel )
deWiTTERS Beispiel:
while( game_is_running ) {
while( GetTickCount() > next_game_tick ) {
update();
next_game_tick += SKIP_TICKS;
}
interpolation = float( GetTickCount() + SKIP_TICKS - next_game_tick )
/ float( SKIP_TICKS );
render( interpolation );
}
Einige Ressourcen
- Oberbeleuchter bei Spielen: Korrigieren Sie Ihren Zeitschritt!
- deWitters Game-Loop-Artikel
- Die FPS von Quake 3 beeinflussen die Sprungphysik - ein Grund, warum Doom 3 auf 60 fps festgelegt ist?
- Flixel erfordert einen variablen Zeitschritt (ich denke, dies wird von Flash bestimmt), während Flashpunk beide Typen zulässt.
- Box2Ds Handbuch § Die Simulation der Welt von Box2D schlägt vor, konstante Zeitschritte zu verwenden.