Idle et traitement physique

Les jeux fonctionnent en boucle. À chaque image, vous devez mettre à jour l'état de votre monde de jeu avant de le dessiner à l'écran. Godot fournit deux méthodes virtuelles dans la classe Node pour le faire : Node._process() et Node._physics_process(). Si vous définissez l'un ou l'autre ou les deux dans un script, le moteur les appellera automatiquement.

Deux types de traitement sont à votre disposition :

  1. Traitement au ralenti vous permet d'exécuter un code qui met à jour un nœud à chaque trame, aussi souvent que possible.

  2. **Le traitement physique se fait à un rythme fixe, 60 fois par seconde par défaut. Cette vitesse est indépendante de la fréquence d'images réelle de votre jeu et permet un fonctionnement fluide de la physique. Vous devriez l'utiliser pour tout ce qui implique le moteur physique, comme le déplacement d'un corps qui entre en collision avec l'environnement.

Vous pouvez activer le traitement passif en définissant la méthode _process() dans un script. Vous pouvez le désactiver et le réactiver en appelant Node.set_process().

Le moteur de jeu appelle cette méthode à chaque fois il affiche la trame :

func _process(delta):
    # Do something...
    pass

Gardez à l'esprit que la fréquence à laquelle le moteur appelle _process() dépend du framerate de votre application, qui varie dans le temps et selon les appareils.

Le paramètre delta de la fonction est le temps écoulé en secondes depuis le précédent appel à _process(). Utilisez ce paramètre pour effectuer des calculs indépendants du taux de rafraîchissement. Par exemple, vous devez toujours multiplier une valeur de vitesse par delta pour animer un objet en mouvement.

Le traitement physique fonctionne avec une fonction virtuelle similaire : _physics_process(). Utilisez-la pour les calculs qui doivent se produire avant chaque étape physique, comme le déplacement d'un personnage qui entre en collision avec le monde du jeu. Comme mentionné ci-dessus, _physics_process() s'exécute à intervalles de temps fixes autant que possible pour garder les interactions physiques stables. Vous pouvez modifier l'intervalle entre les étapes de la physique dans les paramètres du projet, sous Physics -> Common -> Physics Fps. Par défaut, il est réglé pour s'exécuter 60 fois par seconde.

Le moteur de jeu appelle cette méthode à chaque fois il affiche la trame :

func _physics_process(delta):
    # Do something...
    pass

La fonction _process(), cependant, n'est pas synchronisée avec la physique. Son taux de rafraîchissement n'est pas constant et dépend de l'optimisation du hardware et du jeu. Son exécution se fait après le traitement de la physique sur les jeux mono-threadés.

Une façon simple de voir la fonction _process() au travail est de créer une scène avec un seul nœud Label, auquel est attaché le script suivant :

extends Label

var time = 0

func _process(delta):
    time += delta
    text = str(time) # 'text' is a built-in Label property.

Lorsque vous exécutez la scène, vous devriez voir un compteur augmenter à chaque image.