Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| gdscript:cheatsheet [2025/10/14 20:17] – [Lebenszyklus-Hooks] silversurfer | gdscript:cheatsheet [2025/10/14 20:51] (aktuell) – [Fehlerbehandlung & Debug] silversurfer | ||
|---|---|---|---|
| Zeile 35: | Zeile 35: | ||
| ==== Sichtbarkeits-/ | ==== Sichtbarkeits-/ | ||
| + | <codedoc code: | ||
| - | - @tool # Skript läuft auch im Editor (Godot 3/4) | + | ===== Knoten & Szenen ===== |
| - | - export, onready, class_name siehe oben | + | |
| - | Knoten & Szenen | + | ==== Zugriff |
| - | - Zugriff: | + | <codedoc code: |
| - | | + | var p = $Player/ |
| - | | + | ==== Instanziieren |
| - | - Instanziieren: | + | <codedoc code: |
| - | | + | var enemy = Packed.instantiate() |
| - | | + | var enemy = Packed.instance() |
| - | | + | add_child(enemy)</ |
| - | | + | ==== Entfernen |
| - | - Entfernen: | + | <codedoc code: |
| - | | + | |
| - | Ressourcen laden | + | ===== Ressourcen laden ===== |
| - | - preload (compile-time, | + | ==== preload (compile-time, |
| - | | + | <codedoc code: |
| - | - load (runtime): | + | ==== load (runtime) |
| - | | + | <codedoc code: |
| - | Signale | + | ===== Signale |
| - | - Definieren / Emittieren: | + | ==== Definieren / Emittieren |
| - | | + | <codedoc code: |
| - | | + | emit_signal(" |
| - | - Verbinden: | + | ==== Verbinden |
| - | | + | <codedoc code: |
| - | | + | $Button.connect(" |
| - | - Godot 4: Typed signal syntax möglich: | + | ==== Godot 4: Typed signal syntax möglich |
| - | | + | <codedoc code: |
| - | Eingabe (Input) | + | ===== Eingabe (Input) ===== |
| - | - _input(event) | + | |
| - | - func _input(event): | + | |
| - | if event is InputEventKey and event.pressed: | + | |
| - | if event.scancode | + | |
| - | jump() | + | |
| - | - Input-Mapping (Project Settings -> InputMap): | + | |
| - | - if Input.is_action_pressed(" | + | |
| - | Await / Coroutines / Timer | + | ==== _input(event) ==== |
| - | - Godot 3 yield: | + | <codedoc code:python> |
| - | - yield(get_tree().create_timer(1.0), " | + | if event is InputEventKey and event.pressed: |
| - | - Godot 4 await: | + | if event.scancode == KEY_SPACE: |
| - | | + | jump()</ |
| - | - Timer-Node: | + | ==== Input-Mapping (Project Settings |
| - | - $Timer.start(2.0) | + | <codedoc code: |
| + | ...</ | ||
| - | Collections | + | ===== Await / Coroutines / Timer ===== |
| - | - Array: | + | |
| - | - var a = [1, 2, 3] | + | |
| - | - a.append(4) | + | |
| - | - for i in a: ... | + | |
| - | - Dictionary: | + | |
| - | - var d = {" | + | |
| - | - if d.has(" | + | |
| - | Kontrollstrukturen | + | ==== Godot 3 yield ==== |
| - | - if/ | + | <codedoc code:python>yield(get_tree().create_timer(1.0), " |
| - | - if x > 0: | + | ==== Godot 4 await ==== |
| - | pass | + | <codedoc code:python> |
| - | - match (Godot 4 / GDScript 2.0): | + | ==== Timer-Node ==== |
| - | - match value: | + | <codedoc code:python> |
| - | 1: | + | |
| - | | + | |
| - | _: | + | |
| - | ... | + | |
| - | - for/while: | + | |
| - | - for i in range(5): ... | + | |
| - | - while cond: ... | + | |
| - | Fehlerbehandlung & Debug | + | ===== Collections ===== |
| - | - print(), push_error(), push_warning() | + | ==== Array ==== |
| - | - assert(condition, "message") | + | <codedoc code: |
| + | a.append(4) | ||
| + | for i in a: | ||
| + | | ||
| + | ==== Dictionary: ==== | ||
| + | <codedoc code: | ||
| + | if d.has(" | ||
| + | ... </ | ||
| - | Best Practices (Kurz) | + | ===== Kontrollstrukturen ===== |
| - | - 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 | + | ==== if/ |
| - | - Position setzen (Node2D): | + | <codedoc code: |
| - | - position = Vector2(100, | + | # die Zahl ist größer Null |
| - | - Bewegung: | + | pass |
| - | - velocity = velocity.move_toward(target, | + | elif x < 0: |
| - | - Prüfen ob in Gruppe: | + | # die Zahl ist kleiner Null |
| - | - if is_in_group(" | + | pass |
| - | - Connect per Code: | + | else: |
| - | - some_node.connect(" | + | # die Zahl ist Null |
| + | pass</ | ||
| - | Kurze Beispiele | + | ==== match (Godot 4 / GDScript 2.0): ==== |
| + | <codedoc code: | ||
| + | 1: | ||
| + | ... | ||
| + | _: | ||
| + | ...</ | ||
| + | |||
| + | ==== for/while: ==== | ||
| + | <codedoc code: | ||
| + | ... | ||
| - | Player | + | while cond: |
| - | ```gdscript | + | |
| - | extends CharacterBody2D | + | |
| - | class_name Player | + | ===== Fehlerbehandlung & Debug ===== |
| + | * print(), push_error(), | ||
| + | * assert(condition, | ||
| + | * | ||
| + | |||
| + | ===== 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) === | ||
| + | <codedoc code: | ||
| + | === Bewegung === | ||
| + | <codedoc code: | ||
| + | === Prüfen ob in Gruppe === | ||
| + | <codedoc code: | ||
| + | | ||
| + | === Connect per Code: === | ||
| + | <codedoc code: | ||
| + | |||
| + | ===== Kurze Beispiele ===== | ||
| + | ==== Player (Grundgerüst) ==== | ||
| + | <codedoc code: | ||
| export var speed: float = 200.0 | export var speed: float = 200.0 | ||
| Zeile 144: | Zeile 160: | ||
| if Input.is_action_pressed(" | if Input.is_action_pressed(" | ||
| velocity.x = dir.x * speed | velocity.x = dir.x * speed | ||
| - | move_and_slide() | + | move_and_slide()</ |