Skip to main content

Score op het scherm tonen

Je hebt nu Global.score die de hele speelsessie blijft bestaan. Tijd om de score zichtbaar te maken bovenaan het scherm — met een Label.

Predict

Je wilt dat de tekst op het scherm verandert zodra Global.score verandert. Hoe vaak zou je de tekst opnieuw moeten zetten?

Bekijk het antwoord

Het simpelst is om de tekst elke frame opnieuw te zetten. Dan staat hij altijd gelijk aan Global.score, ongeacht wanneer die wordt opgehoogd. Godot heeft daar een ingebouwde functie voor: _process(delta).

Stap 1: Voeg een Label toe

  1. Open je level-scene (bijv. world.tscn)
  2. Klik met rechts op de root-node → Add Child Node → zoek Label
  3. Hernoem de Label naar ScoreLabel
  4. Sleep de Label in de viewport naar de plek waar je hem wilt hebben (bijv. linksboven)
  5. Pas eventueel in de Inspector de tekstgrootte aan onder Theme Overrides → Font Sizes

Stap 2: Voeg een script toe aan de Label

  1. Selecteer de ScoreLabel-node
  2. Klik op het script-icoontje of klik met rechts → Attach Script
  3. Klik op Create

Stap 3: _process(delta) — elke frame de tekst bijwerken

Vervang de inhoud van het script door:

extends Label

func _process(delta: float) -> void:
text = "Score: " + str(Global.score)
CodeWat doet het?
_process(delta)Wordt elke frame uitgevoerd, ideaal om iets continu bij te werken
textDe tekst die de Label op het scherm toont
str(Global.score)Zet het getal Global.score om naar tekst, zodat je het kunt plakken aan "Score: "

_process vs _physics_process

Je hebt eerder _physics_process(delta) gebruikt in je karakter-script. Wat is het verschil?

FunctieWanneer gebruiken?
_physics_process(delta)Voor beweging, zwaartekracht, botsingen — alles wat met physics te maken heeft
_process(delta)Voor algemene updates — UI, timers, animatie-logica zonder physics

Voor een Label die alleen tekst toont, is _process perfect.

Stap 4: Test het

Start het spel met F5 en pak een muntje op. De Label zou nu live moeten meetellen.

Er gaat iets mis

Mijn Label blijft op "0" staan

Oorzaak: Het script werkt wel, maar Global.score wordt nergens opgehoogd — bijvoorbeeld omdat je vergeten bent het muntje-script te updaten naar Global.score += 1.

Oplossing: Open je muntje-script en controleer dat er Global.score += 1 staat (niet body.score += 1 uit de vorige les).

Mijn Label toont niks, of de oude waarde uit de Inspector

Oorzaak: Het script is niet aan de juiste Label gekoppeld, of de Label staat buiten het zichtbare scherm.

Oplossing:

  1. Selecteer de ScoreLabel-node — bovenaan in de Inspector moet een script-icoontje staan
  2. Controleer in de viewport dat de Label binnen het blauwe kader (schermgrens) staat
  3. Zet bij Theme Overrides → Font Sizes een grotere waarde als de tekst te klein is om te lezen
Ik krijg Invalid call. Nonexistent function 'Str' in base 'int'

Oorzaak: GDScript is hoofdlettergevoelig. Str bestaat niet — alleen str (kleine letter).

Oplossing: Vervang Str(...) door str(...).

Mijn score telt twee keer op per muntje

Oorzaak: Het body_entered-signal is per ongeluk twee keer gekoppeld aan dezelfde functie.

Oplossing: Zie Signals & een muntje oppakken → "Er gaat iets mis" → "signal already connected".


Make-opdracht: een levens-Label

Je hebt nu een Score-Label. Doe hetzelfde voor Global.levens.

Opdracht: Voeg een tweede Label toe (LevensLabel) die Global.levens toont in rood.

Tip
  • Voeg een nieuwe Label toe aan je level-scene, hernoem naar LevensLabel
  • Koppel een script met dezelfde structuur als ScoreLabel, maar verwijs naar Global.levens
  • Voor de kleur: selecteer de Label en zoek in de Inspector naar Theme Overrides → Colors → Font Color — zet die op rood
Antwoord

Script op LevensLabel:

extends Label

func _process(delta: float) -> void:
text = "Levens: " + str(Global.levens)

Voor de rode kleur: Inspector → Theme Overrides → Colors → vink Font Color aan → kies rood.