Nachdem du gelernt hast, Scenes und Nodes zu strukturieren und ihnen visuelle Elemente hinzuzufügen, ist es an der Zeit, ihnen Leben einzuhauchen! In Godot ist der Ort für Verhalten und Logik in deinen Nodes das Script. Wir nutzen dafür hauptsächlich GDScript, eine speziell für Godot entwickelte Skriptsprache. Mit ihrer zugänglichen, Python-ähnlichen Syntax wird dir als erfahrenem Programmierer der Einstieg leichtfallen.
In diesem Artikel fügen wir ein Skript an unseren Sprite2D
Node an und bringen ihn dazu, sich zu drehen.
Schritt 1: Ein Script an den Sprite2D Node anhängen
Wir beginnen damit, unseren Sprite2D
Node mit einem Script zu verbinden:
- Gehe zurück zur 2D-Ansicht (klicke auf den „2D“-Tab oben im Viewport).
- Wähle im Scene Dock deinen Sprite2D Node aus.
- Suche oberhalb des Scene Trees den Button zum Anhängen eines Scripts. Er sieht aus wie eine kleine Pergamentrolle mit einem grünen Plus-Symbol darauf. Klicke diesen Button.
- Ein Fenster namens „Attach Node Script“ öffnet sich.
- Inherits: Hier steht automatisch Sprite2D. Das bedeutet, dein Script wird von der Klasse
Sprite2D
erben. Das Script hat dann Zugriff auf alle Eigenschaften und Funktionen, die einSprite2D
hat (wietexture
,position
,rotation
, etc.). - Path: Hier wird festgelegt, wo die Script-Datei gespeichert wird. Der Standardpfad neben der Scene ist für den Anfang gut. Gib dem Script gleich den passenden Namen
player.gd
, da das später unser Spieler sein soll. Die Endung.gd
ist wichtig! - Template: Dies bestimmt, welcher Basis-Code im Script enthalten sein soll. Wähle hier „Node“. Das ist eine gute Vorlage, die die grundlegenden Funktionen (
_ready
,_process
) enthält, die man oft braucht.
- Inherits: Hier steht automatisch Sprite2D. Das bedeutet, dein Script wird von der Klasse
- Klicke auf „Create“.
Godot wechselt nun automatisch zum Script Editor (der „Script“-Tab oben im Viewport wird aktiv) und du siehst den generierten Basis-Code für dein Script.
Das Script-Template verstehen
Im Script Editor siehst du folgenden Code:
1 2 3 4 5 6 7 |
extends Sprite2D # Called when the node enters the scene tree for the first time. func _ready(): pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): pass # Replace with function body. |
extends Sprite2D
: Diese Zeile teilt Godot mit, dass dieses Script die Funktionalität einesSprite2D
erweitert (es erbt von ihm). Das ist entscheidend, da das Script dadurch direkten Zugriff auf alle Eigenschaften und Methoden desSprite2D
Nodes hat, an den es angehängt ist.func _ready():
: Dies ist eine spezielle Funktion, die Godot aufruft, sobald der Node und alle seine Children in der aktiven Scene bereit sind. Sie wird nur einmal aufgerufen, wenn die Scene gestartet wird. Perfekt für Initialisierungen, die einmalig zu Beginn des Spiels oder Scene-Starts ausgeführt werden sollen.func _process(delta):
: Dies ist eine weitere spezielle Funktion, die Godot in jedem Frame deines Spiels aufruft. Hier kommt die Hauptspiellogik rein, die ständig aktualisiert werden muss (Bewegung, Animationen, etc.).delta
ist die Zeit in Sekunden, die seit dem letzten Frame vergangen ist – sehr nützlich für zeitbasierte, flüssige Bewegungen unabhängig von der Bildrate des Spiels.pass
: Das ist ein Platzhalter in GDScript (und Python), der einfach „tue nichts“ bedeutet. Er ist da, damit die Funktion syntaktisch korrekt ist, auch wenn sie leer ist.
Tipp: Wenn du wie ich aus der objektorientierten Programmierung kommst, möchtest du dem Script vermutlich einen passenden Namen geben. Dazu ergänzt du einfach class_name
Name vor extends
. Um den Überblick zu behalten achte ich darauf, dass der Node in der Scene, die Script-Datei und das Script den gleichen Namen haben:
Schritt 2: Dem Sprite eine Bewegung hinzufügen (Rotation)
Lass uns das Script ändern, damit sich der Sprite dreht. Wir tun dies in der _process
-Funktion, da die Drehung ständig aktualisiert werden soll.
- Lösche das
pass
unter der Zeilefunc _process(delta):
. - Füge die folgende Zeile direkt unter
func _process(delta):
ein (achte auf die Einrückung! In GDScript ist die Einrückung wichtig, meist 4 Leerzeichen oder ein Tab):
1 2 |
func _process(delta): rotation_degrees += 45 * delta |
Erklärung der Codezeile:
rotation_degrees
: Das ist die Eigenschaft desSprite2D
(geerbt vonNode2D
), die den aktuellen Rotationswinkel des Nodes in Grad speichert. Da unser Script vonSprite2D
(extends Sprite2D
) erbt, können wir direkt auf diese Eigenschaft zugreifen.+=
: „Addieren und zuweisen“, kennt man45
: Dies ist die Geschwindigkeit der Drehung in Grad pro Sekunde. Wir wollen, dass sich der Sprite um 45 Grad pro Sekunde dreht.* delta
: Dies ist entscheidend für die Synchronisation!delta
ist die Zeit, die seit dem letzten Frame vergangen ist (oft ein sehr kleiner Wert, wie 0.016 für 60 FPS). Indem wir die gewünschte Drehgeschwindigkeit (45
) mitdelta
multiplizieren, stellen wir sicher, dass die Drehung unabhängig davon erfolgt, wie schnell oder langsam der Computer die Frames verarbeitet. Wenn der Frame länger dauert (z.B. bei niedriger FPS), wirddelta
größer, und der Sprite dreht sich in diesem Frame weiter, um die Geschwindigkeit pro Sekunde konstant zu halten.
Schritt 3: Script speichern und Scene ausführen
- Speichere dein Script: File -> Save oder drücke Strg + S.
- Führe die Scene erneut aus: Klicke auf „Run Current Scene“ (F6) oder „Run Project“ (F5).
Ergebnis:
Du siehst jetzt ein neues Fenster, in dem das Godot-Logo rotiert. Du hast gerade dein erstes Stück Logik in GDScript geschrieben und ausgeführt!
Dein nächster Schritt
Sehr gut, du hast gelernt, wie man ein Script an einen Node anhängt, das GDScript-Template versteht und einen Sprite zum Rotieren bringt.
Als nächstes kümmern wir uns um die Input-Verarbeitung, damit du den Sprite mit der Tastatur steuern kannst.