Godot

Callbackmetoder

⚙️ Fördefinierade metoder & Nodlivscykel i Godot

🧠 Vad är fördefinierade metoder?

I Godot kan du skapa egna funktioner, men det finns också inbyggda metoder som spelmotorn automatiskt anropar i olika skeden. Dessa metoder kallas ofta callback-metoder.

De används för att:

  • Initiera objekt när spelet startar.
  • Utföra logik varje bildruta.
  • Reagera på användarinmatning.
  • Synka med fysikmotorn.

🕒 Nodens livscykel

När en nod skapas och körs i spelet följer den ett antal steg:

  1. _enter_tree()
    Körs när noden läggs till i scenens träd.

  2. _ready()
    Körs när noden och dess barn är laddade och redo. Detta är en av de mest använda metoderna.

  3. _process(delta)
    Körs varje bildruta. Används för allmän logik.

  4. _physics_process(delta)
    Körs varje bildruta med konstant frekvens, synkad till fysiksystemet (t.ex. 60 Hz). Används för rörelser och kollisionshantering.

  5. _input(event)
    Körs när en inmatning (tangent, mus, joystick) sker.

  6. _unhandled_input(event)
    Som ovan, men bara om ingen annan nod redan fångat eventet.

  7. _exit_tree()
    Körs när noden tas bort från trädet (t.ex. när scenen byts).


🧪 Exempel: Spelkaraktär

extends CharacterBody2D

func _ready():
    print("Spelaren är redo!")

func _process(delta):
    rotation += 1 * delta

func _input(event):
    if event.is_action_pressed("ui_accept"):
        print("Enter trycktes ner")

🔄 Skillnad mellan _process() och _physics_process()

Funktion När den används
_process(delta) När du vill uppdatera grafik, UI, animationer
_physics_process(delta) När du jobbar med fysik eller kollisioner
  • Delta är tiden (i sekunder) sedan förra körningen. Använd det för att göra rörelser oberoende av FPS.

📥 Inmatning med _input()

Exempel på att reagera på tangenttryck:

func _input(event):
    if event.is_action_pressed("ui_up"):
        print("Uppåt trycktes")

Du kan också lägga till egna inmatningar i Project → Project Settings → Input Map.


🧯 Avslutning: Viktigt att komma ihåg

  • Använd _ready() för initiering.
  • Använd _process() för kontinuerlig uppdatering.
  • Använd _physics_process() för fysik.
  • Använd _input() eller signaler för användarinteraktion.
  • För att spara prestanda: undvik att använda dessa metoder i varje nod om det inte behövs.