Dies ist eine alte Version des Dokuments!
GDScript — Kurzes Cheatsheet (Deutsch)
Dieses Cheatsheet fasst die wichtigsten Elemente von GDScript (Godot 3 & 4) kompakt zusammen. Codebeispiele sind kurz und direkt anwendbar.
Allgemeines
- Kommentar: # Einzeiliger Kommentar
- Datei-Scope:
- extends Node2D # Erbt von einem Node-Typ
- class_name MyClass # Globaler Klassenname (registriert im Editor)
Variablen & Typen
Dynamisch / untypisiert
var x = 5
Getypt (empfohlen)
var speed: int = 200 const MAX_HP: int = 100
onready (erst nach Knoten-Initialisierung):
@onready var sprite = $Sprite
export (sichtbar/konfigurierbar im Editor)
@export var speed := 200 @export (int, 0, 400) var health := 100 # Hinweis: Hint-Syntax kann je nach Version leicht variieren
Funktionen
Definition
func my_func(param: int) → String: return str(param)
Lebenszyklus-Hooks
func _ready(): # nach dem Hinzufügen in die Szene func _process(delta): # every frame (nicht-physikalisch) func _physics_process(delta): # physics frame
Sichtbarkeits-/Annotations
@tool # Skript läuft auch im Editor (Godot 3/4) export, onready, class_name siehe oben
Knoten & Szenen
Zugriff
var player = get_node(„Player“) var p = $Player/SubNode
Instanziieren
var Packed = preload(„res://Enemy.tscn“) var enemy = Packed.instantiate() # Godot 4 var enemy = Packed.instance() # Godot 3 (alte Methode) add_child(enemy)
Entfernen
queue_free()
Ressourcen laden
preload (compile-time, schneller)
var TEX = preload(„res://sprite.png“)
load (runtime)
var TEX = load(„res://sprite.png“)
Signale
Definieren / Emittieren
signal hit(damage) emit_signal(„hit“, 10)
Verbinden
connect(„hit“, self, „_on_hit“) $Button.connect(„pressed“, self, „_on_pressed“)
Godot 4: Typed signal syntax möglich
signal hit(damage: int)
Eingabe (Input)
_input(event)
func _input(event): if event is InputEventKey and event.pressed: if event.scancode == KEY_SPACE: jump()
Input-Mapping (Project Settings -> InputMap)
if Input.is_action_pressed(„ui_right“): …
Await / Coroutines / Timer
Godot 3 yield
yield(get_tree().create_timer(1.0), „timeout“)
Godot 4 await
await get_tree().create_timer(1.0).timeout
Timer-Node
$Timer.start(2.0)
Collections
Array
var a = [1, 2, 3] a.append(4) for i in a: …
Dictionary:
var d = {„hp“: 10, „name“: „Player“} if d.has(„hp“): …
Kontrollstrukturen
if/elif/else
if x > 0: # die Zahl ist größer Null pass elif x < 0: # die Zahl ist kleiner Null pass else: # die Zahl ist Null pass
match (Godot 4 / GDScript 2.0):
match value:
1:
… _:
…
for/while:
for i in range(5): … while cond: …
Fehlerbehandlung & Debug
- print(), push_error(), push_warning()
- assert(condition, „message“) https://docs.godotengine.org/de/4.5/tutorials/scripting/gdscript/gdscript_basics.html#assert-keyword
Best Practices (Kurz)
- Typisieren wo möglich (besseres Autocomplete & Fehlercheck)
- Export für Editor-Bearbeitbarkeit
- onready für Knoten-Referenzen
- Verwende preload für häufig genutzte Ressourcen
- Trenne Gameplay-Logik in übersichtliche Methoden
- Nutze Signals statt eng gekoppelter Node-Referenzen (lockere Kopplung)
Nützliche One-Liner
Position setzen (Node2D)
position = Vector2(100, 200)
Bewegung
velocity = velocity.move_toward(target, speed * delta)
Prüfen ob in Gruppe
if is_in_group(„enemies“): …
Connect per Code:
some_node.connect(„signal“, self, „_method“)
Kurze Beispiele
Player (Grundgerüst)
extends CharacterBody2D class_name Player export var speed: float = 200.0 onready var sprite = $Sprite func _physics_process(delta): var dir = Vector2.ZERO if Input.is_action_pressed(„ui_right“): dir.x += 1 if Input.is_action_pressed(„ui_left“): dir.x -= 1 velocity.x = dir.x * speed move_and_slide()