Flappy Bird-kloon
Godot 4.5
Geschreven voor Godot 4.5.x — zie Godot-versies voor compatibiliteit.
Het idee
Een vogel die tegen de zwaartekracht in moet vechten. Eén toets indrukken = even een flapje omhoog. Tussen de buizen door zien te komen. Raak je er een, dan is het Game Over. Hoe verder je komt, hoe hoger je score.
Het hart van het spel is hetzelfde als in jouw platformer: velocity.y aanpassen op het moment dat de speler een toets indrukt. Maar nu zonder grond — alleen jij houdt de vogel in de lucht.
Wat ga je leren?
- Een spawner bouwen die met een
Timerperiodiek nieuwe obstakels aanmaakt. - Scenes "instantieren" met
preload()+instantiate(). - Een Area2D als game-over-trigger inzetten.
- Score per gepasseerde buis verhogen via een tweede Area2D.
Nodes die je nodig hebt
| Node | Waarvoor? |
|---|---|
CharacterBody2D | De vogel — gebruikt velocity.y voor zwaartekracht en flappen. |
AnimatedSprite2D | Wapperende vleugel-animatie. |
CollisionShape2D | Hitbox van de vogel en van de buizen. |
Area2D | Twee soorten: één raakt-een-buis → game over, één tussen de buizen → score. |
StaticBody2D of TileMapLayer | De buis-obstakels zelf. |
Timer | Spawnt periodiek nieuwe buizen. |
CanvasLayer + Label | Score bovenin het scherm. |
Handige GDScript-functies
| Functie / property | Wat doet het? |
|---|---|
Input.is_action_just_pressed("ui_accept") | true op het frame dat spatie wordt ingedrukt — perfect voor één flap per druk. |
velocity.y = JUMP_VELOCITY | Snap de verticale snelheid naar een vaste waarde omhoog. |
velocity += get_gravity() * delta | Laat de vogel vallen wanneer er niet wordt geflapt. |
move_and_slide() | Past velocity toe op de vogel. |
preload("res://buis.tscn") | Laadt de buis-scene in geheugen, klaar om te instantieren. |
instantiate() + add_child(...) | Maakt een nieuwe buis aan en hangt hem in de scene. |
queue_free() | Verwijdert een buis die buiten beeld is — anders blijven ze geheugen vreten. |
Timer.timeout (signal) | Trigger om elke X seconden een nieuwe buis te spawnen. |
body_entered (signal) | Detecteert dat de vogel een buis raakt → game over. |
get_tree().reload_current_scene() | Herstart het level bij game over. |
Externe links
- GDQuest — zoek op "Flappy Bird Godot" voor video-uitleg.
- YouTube: zoek "Godot 4 Flappy Bird tutorial" (kanalen als KidsCanCode of Heartbeast hebben goede uitlegvideo's).
- Itch.io: gratis vogel-assets — sprite-sheets om mee te beginnen.
- Godot Docs — Instancing scenes — de officiële uitleg over
preload()+instantiate().
Eerste stappen
- Begin met een lege
Node2Dals wereld-root. - Bouw de vogel als losse scene (
vogel.tscn) metCharacterBody2D+AnimatedSprite2D+CollisionShape2D. - Schrijf het beweging-script: zwaartekracht in
_physics_process, eenvelocity.y = JUMP_VELOCITYbijis_action_just_pressed. - Bouw een
buis.tscnmet tweeStaticBody2D's (boven en onder) en eenArea2Dertussen voor de score-trigger. - Voeg een
Timertoe aan de wereld. Koppeltimeoutaan een script-functie diebuis.tscninstantieert op een willekeurige hoogte.
Vanaf hier kun je polish toevoegen: een achtergrond, geluidseffecten, een game-over-scherm met de cursus-start_menu-techniek.