Inhaltsverzeichnis

GDScript — Kurzes Cheatsheet (Deutsch)

Dieses Cheatsheet fasst die wichtigsten Elemente von GDScript (Godot 3 & 4) kompakt zusammen. Codebeispiele sind kurz und direkt anwendbar.

Allgemeines

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

Best Practices (Kurz)

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()