In deel 3 van deze reeks zorgen we dat onze speler binnen onze wereld blijft, met het 'collision' systeem van Godot. Dit systeem is ook nodig voor bijvoorbeeld combat en interactie met objecten.
Godot heeft zoals vele game engines een fysica systeem, waarmee we botsingen (collisions) van objecten kunnen simuleren.
De afmetingen van een object staan los van de graphics (tekeningen) op het scherm. Objecten die kunnen botsen zijn meestal opgebouwd uit eenvoudige vormen, zoals rechthoeken, cirkels of lijnen.
Willen we dat onze speler 'binnen' de wereld blijft, dan moeten we 2 zaken toevoegen:
- de grenzen van de wereld, waar we ook collision objects voor gaan gebruiken,
- en een collision object voor de speler zelf.
We starten met onze speler. Zorg dat de 2D
view open staat, en de 'player' scene actief is. Links moet de node
die 'CollisionShape2D' heet, geselecteerd zijn.
Dan kiezen we rechts bij shape, een CapsuleShape2D
.
De grootte en richting van de CapsuleShape2D
kan je met de muis aanpassen, via de kleine handvaten, maar in ons geval doen we het met het toetsenbord en typen we dadelijk de juiste waardes voor radius
= 50, height
= 300 en rotation
= 90:
Om later geen problemen te hebben met sprites die niet op de juiste manier voor of achter mekaar liggen, zorgen we dat de CapsuleShape2D
op position
x
= 0 px en y
= 0 px blijft staan.
We gaan de AnimatedSprite2D
verplaatsen, zodat de voeten van het personage in de CapsuleShape2D
staan. Selecteer de AnimatedSprite2D
en verander zijn positie naar x
= 10 px en y
= -300 px.
Doordat we enkel de voeten gebruiken voor botsingen, kan ons personage voor en achter andere personages lopen. Dit ziet er beter uit. Als we het hele lichaam gebruiken voor botsingen, kan dit niet. De collision shapes kunnen niet overlappen, ze botsen. De sprites kunnen dat wel. Hier zie je het verschil:
Nu gaan we verder met de wereld. Zorg dat de 2D
view open staat, en de 'game' scene actief is. Links moet je node
die we 'Arena' hebben genoemd, geselecteerd zijn. Deze node is een StaticBody2D
, wat wil zeggen dat het een object is dat meedoet aan botsingen, maar dat statisch blijft (niet beweegt). Klik op de +
(plus) knop om een child node toe te voegen.
In de Create New Node
dialoog voegen we een CollisionShape2D
toe.
Voor de boven- en ondergrens van de wereld gebruiken we een simpele lijn. Alles aan 1 kant van de lijn telt als botsing, de andere kant is wandelbaar.
Selecteer de nieuwe CollisionShape2D
en maak voor de Shape
een nieuwe WorldBoundaryShape2D
.
We stellen in welke kant van de lijn wandelbaar is door bij Normal
onze y
= 1 te maken. (Naar beneden). De lijn zelf zetten we vanboven aan de rand van de bomen door position
y
= -300 te maken:
Dit kunnen we nu best eens testen. Start het project met de Run Project
knop of F5
.
De ondergrens van de wereld maken we op dezelfde manier. Selecteer opnieuw de Arena
node en voeg een nieuwe CollisionShape2D
toe. Deze geven we ook een WorldBoundaryShape2D
als vorm.
De normal
(richting) staat standaard op x
= 0 en y
= -1. Dit is goed, dit is naar boven. We veranderen wel de position
naar y
= 1080.
De linker- en rechtergrens zetten we iets buiten beeld. Dan kunnen straks de vijanden net buiten beeld spawnen.
Maak nog twee maal onder de Arena
node een CollisionShape2D
, met telkens een WorldBoundaryShape2D
De linkergrens heeft normal
x
= 1 en y
= 0. De position
x
= -2300 px.
De rechtergrens heeft normal
x
= -1 en y
= 0. De position
x
= 2300 px.
Als dit klaar is kan je opnieuw testen met Run Project
of F5
.
In het volgende deel (deel 4) gaan we een vijand toevoegen.
Top comments (0)