Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Leerlauf und Physik-Prozessierung

Spiele laufen in einer Schleife. Bei jedem Frame müssen Sie den Zustand Ihrer Spielwelt aktualisieren, bevor Sie sie auf den Bildschirm zeichnen. Godot bietet zwei virtuelle Methoden in der Node-Klasse, um dies zu tun: Node._process() und Node._physics_process(). Wenn Sie eine oder beide in einem Skript definieren, wird die Engine sie automatisch aufrufen.

Es stehen Ihnen zwei Arten der Prozessierung zur Verfügung:

  1. Die Leerlauf-Prozessierung ermöglicht es Ihnen, Code auszuführen, der einen Node so oft wie möglich pro Frame aktualisiert.

  2. Die Physik-Prozessierung erfolgt mit einer festen Rate, standardmäßig 60 Mal pro Sekunde. Dies ist unabhängig von der tatsächlichen Framerate Ihres Spiels und sorgt dafür, dass die Physik reibungslos läuft. Sie sollten sie für alles verwenden, was die Physik-Engine betrifft, wie das Bewegen eines Bodys, der mit der Umgebung kollidiert.

Sie können die Leerlauf-Prozessierung aktivieren, indem Sie die Methode _process() in einem Skript definieren. Sie können sie durch den Aufruf von Node.set_process() aus- und wieder einschalten.

Die Engine ruft diese Methode jedes Mal auf, wenn sie einen Frame zeichnet:

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

Beachten Sie, dass die Häufigkeit, mit der die Engine _process() aufruft, von der Framerate Ihrer Anwendung abhängt, die zeitlich und geräteabhängig variiert.

Der Parameter delta der Funktion ist die seit dem letzten Aufruf von _process() verstrichene Zeit in Sekunden. Verwenden Sie diesen Parameter, um Berechnungen unabhängig von der Framerate zu machen. Zum Beispiel sollten Sie immer einen Geschwindigkeitswert mit delta multiplizieren, um ein sich bewegendes Objekt zu animieren.

Die Physik-Prozessierung funktioniert mit einer ähnlichen virtuellen Funktion: _physics_process(). Verwenden Sie diese Funktion für Berechnungen, die vor jedem physikalischen Schritt stattfinden müssen, wie z.B. das Bewegen eines Charakters, der mit der Spielwelt kollidiert. Wie bereits erwähnt, läuft _physics_process() so oft wie möglich in festen Zeitabständen ab, um die Physik-Interaktionen stabil zu halten. Sie können das Intervall zwischen den Physikschritten in den Projekteinstellungen unter Physik -> Allgemein -> Physik-Fps ändern. Standardmäßig ist es so eingestellt, dass es 60 Mal pro Sekunde ausgeführt wird.

Die Engine ruft diese Methode vor jedem Physikschritt auf:

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

Die Funktion _process() ist nicht mit der Physik synchronisiert. Ihre Geschwindigkeit hängt von der Hardware und der Spieloptimierung ab. Sie läuft auch nach dem Physikschritt in Single-Thread-Spielen.

Sie können die Funktion _process() bei der Arbeit sehen, indem Sie eine Szene mit einem einzelnen Label-Node erstellen, an den das folgende Skript angehängt ist:

extends Label

var time = 0

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

Wenn Sie die Szene laufen lassen, sollten Sie einen Zähler sehen, der mit jedem Frame steigt.