====== 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|Online-Doku]]
*
===== 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()