🧩 Grunderna i Godots nodsystem
Vad är en nod?
En nod (node) är en grundläggande byggsten i Godot. Nästan allt i spelet — kameror, sprites, ljud, användargränssnitt och spelaren själv — är noder. Varje nod:
En scen är egentligen bara en nod med ett eget träd av undernoder.
Noder ärvs i hierarkier (arvsträd)
Alla noder ärver från basklassen Node. Här är ett förenklat exempel:
Node
├── Node2D (för 2D-spel)
│ ├── Sprite2D
│ ├── Area2D
│ └── CharacterBody2D
└── Control (för UI)
├── Button
└── Label
Exempel på vanliga nodtyper
| Nodtyp | Beskrivning. |
|---|---|
| Node2D | Basnod för 2D-positionering. |
| CharacterBody2D | Används för spelkaraktärer (har fysik). |
| Sprite2D | Visar en bild i 2D. |
| Label | Skriver ut text på skärmen. |
| Timer | Räknar ner tid. |
| Area2D | För kollision och triggers (t.ex. pickups). |
| AudioStreamPlayer2D | Spelar ljud. |
| Control | För UI-element. |
⸻
⚙️ Livscykel och fördefinierade metoder i GDScript
Godot anropar automatiskt vissa metoder under olika delar av spelets körning. Dessa kallas callback-metoder och fungerar som “krokar” in i motorns logik.
Viktiga metoder
| Metod | När den körs |
|---|---|
| _ready() | När noden är klar och placerad i scenen |
| _process(delta) | Varje bildruta, används för logik som inte är fysikbaserad |
| _physics_process(delta) | Varje bildruta, synkad med fysiksystemet |
| _input(event) | När en input (mus, tangentbord etc.) tas emot |
| _unhandled_input(event) | Som _input(), men om ingen annan nod fångade det |
| _exit_tree() | När noden tas bort från scenen |
| _enter_tree() | När noden läggs till i scenen |
Kodexempel
extends Sprite2D
func _ready():
print("Scenen är redo!")
func _process(delta):
rotation += 1.0 * delta
func _input(event):
if event.is_action_pressed("ui_accept"):
print("Du tryckte Enter!")
⸻
🧠 Signal-systemet (Event-baserat)
Godot använder signaler för att reagera på händelser: • Exempel: en knapp trycks, en kropp krockar med något, en timer går ut. • Du kan ansluta en signal till en funktion i din kod.
Exempel med signal:
func _on_button_pressed():
print("Knappen trycktes ned!")
I editorn:
⸻
📂 Övergripande struktur i ett projekt
En vanlig struktur i Godot-projekt:
project/
├── scenes/
│ ├── MainMenu.tscn
│ ├── Player.tscn
│ └── Level1.tscn
├── scripts/
│ ├── Player.gd
│ └── GameManager.gd
├── assets/
│ ├── sprites/
│ ├── audio/
│ └── fonts/
└── Global.gd ← Autoloaded (global state/variabler)
⸻
🧭 Sammanfattning