Une boucle de jeu doit-elle être basée sur des pas de temps fixes ou variables? Est-ce qu'on est toujours supérieur ou est-ce que le bon choix varie selon les jeux?
Pas de temps variable
Les mises à jour physiques reçoivent un argument "temps écoulé depuis la dernière mise à jour" et sont donc dépendantes du nombre d'images par seconde. Cela peut vouloir dire faire des calculs comme position += distancePerSecond * timeElapsed
.
Avantages : lisse, plus facile à coder
Inconvénients : non déterministe, imprévisible à très petites ou grandes étapes
Exemple de deWiTTERS :
while( game_is_running ) {
prev_frame_tick = curr_frame_tick;
curr_frame_tick = GetTickCount();
update( curr_frame_tick - prev_frame_tick );
render();
}
Pas de temps fixe
Les mises à jour peuvent même ne pas accepter un "temps écoulé", car elles supposent que chaque mise à jour dure une période donnée. Les calculs peuvent être faits comme position += distancePerUpdate
. L'exemple inclut une interpolation pendant le rendu.
Avantages : prévisible, déterministe (plus facile à synchroniser au réseau?), Code de calcul plus clair
Inconvénients : non synchronisé pour surveiller v-sync (provoque des graphiques instables sauf si vous interpolez), cadence maximale limitée (sauf si vous interpolez), difficile à travailler dans des cadres assumer des pas de temps variables (comme Pyglet ou Flixel )
Exemple de deWiTTERS :
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 );
}
Quelques ressources
- Gaffer sur les jeux: Fixez votre timestep!
- L'article de la boucle de jeu de deWitter
- Les FPS de Quake 3 affectent la physique des sauts - prétendument une des raisons pour lesquelles Doom 3 est bloqué en mode image à 60fps?
- Flixel nécessite un pas de temps variable (je pense que cela est déterminé par Flash) alors que Flashpunk autorise les deux types.
- Le manuel de Box2D § Simuler le monde de Box2D suggère qu'il utilise des pas de temps constants.