Aller au contenu

Bases: le « delta-time » et ses utilisations.

Le Delta-time, ou dt, est une notion importante de Construct (et pas seulement), si vous ne l’utilisez pas, vous risquez une chose:

-que votre jeu ne tourne pas à la bonne vitesse en fonction du taux de rafraîchissement de l’écran, et des fps.

Ce mini-tutoriel à pour but de parler de cette valeur système, en essayant d’être le plus clair possible sur quand l’utiliser.

Delta-time, définition

Le delta-time, ou dt, est le temps écoulé entre la frame précédente et la frame actuelle, elle est actualisée à chaque frame, pour être plus clair, c’est le nombre de secondes par frame (c’est d’ailleurs son unité de mesure dans C2, pour rappel même si elle est en secondes par frame, cela ne signifie, heureusement pas, que elle est arrondie à la seconde par frame près, on est sur des valeurs minimales)

Ainsi, à un nombre de fps constant de 100, dt serait égal à 0,01 sec/frame, soit 1/100.

Le nombre de FPS dans C2 est, cependant, mis à jour uniquement à chaque seconde (il compte le nombre de frames rendues à chaque seconde), et donc la valeur fps ne doit pas être utilisée à la place!

Notion d’indépendance aux fps

Une notion courante, mais un peu erronée, est celle de l’indépendance au framerate, certains vont promettre que votre jeu sera totalement indépendant du nombre de fps si vous utilisez dt correctement, c’est faux, un nombre de fps élevé apportera une meilleure précision pour les mouvements, collisions, et behaviors, et ce pour une raison simple:

Un objet dans C2 ne se déplace pas, il se téléporte d’intervalles plus ou moins grands, et donc, si on ne prend pas les précautions nécessaires en plus, un objet se déplaçant très rapidement (d’une distance plus grande que sa bounding box en une frame par exemple) pourra potentiellement traverser un objet extrêmement fin si on ne vérifie que les collision avant et après téléportation.

Il faudrait plutôt parler de dépendance au temps, car le jeu aura les mêmes vitesses moyennes et ce, peu importe les fps, pour un temps donné (qui lui peut-être altéré avec le timescale mais c’est un autre débat), si votre jeu tourne sur un écran 120Hz,60Hz, ou que la synchronisation verticale est désactivée, la vitesse moyenne du jeu restera inchangée (dans les limites du raisonnable, il est possible de forcer C2 à ralentir dans le cas ou le nombre de fps serait trop bas).

Quand ne pas utiliser dt?

Avant de dire quand utiliser dt, autant prendre le temps de dire quand ne pas l’utiliser: si vous utilisez un behavior officiel (et sûrement aussi pour les behaviors faits par des tiers) autre que la physique (et même dans ce cas, une action permet de pallier à cela), dt est déjà utilisé en interne, vous n’avez généralement pas besoin de l’utiliser, car toutes les unités de vitesses sont en pixels par secondes (et non pas pixels par ticks) et les accélérations en pixels par secondes par secondes (et non pas en pixels par ticks²), ils sont donc déjà dépendant du temps plus que des fps.

Aussi, si vous utilisez une condition du genre every X seconds pour déplacer un objet, pour peu que X ne soit pas trop petit, là aussi vous exécutez 1/X fois par secondes le déplacement, qui est donc dépendant du temps écoulé.

Quand utiliser dt?

Lorsque vos interactions personnelles dépendent des fps plutôt que du temps, dt est un moyen de corriger le tir et de convertir une variation en unité/tick en unité/secondes. Un exemple:

every tick : move 20 pixels at angle 45

Ici, le sprite va bouger de 20 pixels chaque frame, peu importe si la frame dure 1/60 de secondes, 1/120 de seconde, 1/10 de seconde, donc, le mouvement dépend totalement du nombre de fps et non du temps!

Dans ce second exemple, on à multiplié la distance parcourue « speed » par dt, ce qui nous fait dans le cas d’un dt de 1/60 une valeur de speed/60 (c’est à dire 0.33333…) et pour un dt de 1/120, une valeur deux fois plus faible, la vitesse moyenne par seconde est donc égale à « speed ».

Conclusion

Il est important de savoir en quelles unités vous parlez, un tick ça varie d’un matériel à un autre, voir même sur le même matériel, une seconde, c’est connu et fixe, il est donc important dans la plupart des jeux de parler clairement.

J’espère que ce mini tutoriel vous aura été utile pour mieux comprendre l’importance de dt, et je vous dis à bientôt.