Coliziuni și pereți
Închizi zona de joc cu patru pereți, ca personajul să nu mai iasă din ecran. Înveți diferența dintre imagine și formă fizică.
La finalul fișei, elevul poate:
- explice diferența dintre CharacterBody2D și StaticBody2D
- construiască pereți cu StaticBody2D și CollisionShape2D
- distingă între ce se vede și ce se ciocnește
- folosească Visible Collision Shapes pentru depanare
Ai nevoie de:
- Godot 4
- Proiectul ColecteazaMonede, cu personajul care se mișcă din fișa 3
Personajul tău se mișcă, dar iese din ecran și se pierde. Îi construim o zonă închisă.
1. Ce este o coliziune
O coliziune apare când formele fizice a două corpuri se întâlnesc.
Până acum ai folosit un singur tip de corp. Acum îl întâlnești pe al doilea:
| Tipul | Ce face | Exemple |
|---|---|---|
CharacterBody2D | se mișcă, e controlat prin cod | jucătorul, un inamic |
StaticBody2D | nu se mișcă niciodată, dar oprește ce se lovește de el | pereți, sol, obstacole |
Peretele va arăta așa:
WallTop [StaticBody2D]
└── CollisionShape2D
└── RectangleShape2D
2. Primul perete
Fereastra jocului are 1152 × 648 pixeli. Construim un chenar gros de 20 de pixeli.
- Deschide
main.tscnși selectează nodulMain. - Ctrl+A →
StaticBody2D→ Create. Apasă F2 și scrieWallTop. - Cu
WallTopselectat, Ctrl+A →CollisionShape2D→ Create. - La Shape alege New RectangleShape2D.
- Deschide Shape și la Size scrie
1152pentru x și20pentru y. - Selectează
WallTop, deschide Transform și punePositionlax = 576,y = 10.
Rulează cu F5 și du personajul în sus. Se oprește.
3. Ceilalți trei pereți
Nu construim de la zero. Duplicăm.
- Selectează
WallTopși apasă Ctrl+D. Se creează o copie, cu tot cu forma din ea. - Redenumește copia
WallBottomși punePositionlax = 576,y = 638.
Repetă pentru pereții laterali, care au forma întoarsă:
- Duplică din nou, redenumește
WallLeft. SelecteazăCollisionShape2D-ul lui și pune la Size valorile20și648. Apoi laWallLeftpunePositionx = 10,y = 324. - Duplică
WallLeft, redenumeșteWallRight,Positionx = 1142,y = 324.
Tabelul complet, ca să verifici:
| Peretele | Size | Position |
|---|---|---|
WallTop | 1152 × 20 | (576, 10) |
WallBottom | 1152 × 20 | (576, 638) |
WallLeft | 20 × 648 | (10, 324) |
WallRight | 20 × 648 | (1142, 324) |
Salvează cu Ctrl+S și rulează cu F5. Du personajul spre fiecare margine: se oprește de fiecare dată.
4. Vezi ce nu se vede
Pereții sunt invizibili. Când ceva nu funcționează, ai nevoie să-i vezi.
În timpul rulării, în editor: Debug → Visible Collision Shapes, apoi rulează din nou.
Godot desenează toate formele de coliziune peste joc, cu albastru transparent. Vezi imediat dacă un perete e prea scurt, dacă e mutat greșit sau dacă forma personajului e mult mai mare decât imaginea lui.
Exerciții
🔑 Rezolvare
Imaginea are 128 de pixeli, micșorată cu Scale = 0.2, deci apare la circa 26 de pixeli.
Forma de 26 × 26 se potrivește bine.
Dacă forma e mult mai mare, personajul se oprește la distanță de perete și pare că „plutește”. Dacă e mult mai mică, intră cu jumătate de corp în perete.
🔑 Rezolvare
Personajul se oprește, dar nu se blochează: dacă îl împingi pe diagonală, alunecă de-a lungul marginii obstacolului în loc să stea pe loc.
Asta face partea „slide” din move_and_slide(). Fără ea, jocurile ar părea lipite: te-ai
opri complet la orice atingere a unui perete.
Obstacolul îl poți păstra sau șterge — nu strică restul jocului.
🔑 Rezolvare
| Obiectul | Se vede? | Oprește personajul? |
|---|---|---|
WallTop | NU | DA |
Sprite2D singur | DA | NU |
Player | DA | DA |
Concluzia: ca să obții un obiect solid și vizibil, ai nevoie de amândouă — un corp cu
CollisionShape2D și un Sprite2D. Godot nu le leagă automat.
🔑 Rezolvare
Doar aspectul. Forma de coliziune a rămas exact aceeași — personajul se oprește în același loc, indiferent cum arată imaginea.
Dacă imaginea pe care ai întins-o nu se suprapune perfect peste formă, se vede clar diferența: personajul pare că se oprește „în aer” sau intră în perete. De aceea, într-un joc adevărat, imaginea și forma se aliniază cu grijă.
Ce ai învățat
StaticBody2Deste corpul care nu se mișcă: pereți, sol, obstacole.- Poziția unui nod este centrul lui, nu colțul.
- Ctrl+D duplică un nod cu tot cu copiii lui.
- Ce se vede și ce se ciocnește sunt lucruri separate.
- Debug → Visible Collision Shapes îți arată formele invizibile, când depanezi.
Zona de joc e închisă. Urmează ce dă sens jocului: monedele.