Scene, noduri și personajul
Creezi proiectul jocului, construiești personajul ca scenă separată din trei noduri și îl așezi în scena principală folosind coordonate.
La finalul fișei, elevul poate:
- creeze un proiect nou și scena principală a jocului
- explice ce este un nod, o scenă și relația părinte–copil
- construiască scena Player din CharacterBody2D, Sprite2D și CollisionShape2D
- folosească sistemul de coordonate 2D și proprietățile Transform
- instanțieze o scenă în altă scenă
Ai nevoie de:
- Godot 4
Un joc nu se construiește dintr-o singură bucată. Se construiește din piese care se pot folosi de mai multe ori. În fișa asta faci prima piesă: personajul.
Cum arată la final
Două scene, în două fișiere separate:
main.tscn player.tscn
Main Player [CharacterBody2D]
└── Player 🎬 ├── Imagine [Sprite2D]
└── Coliziune [CollisionShape2D]
Uită-te aici ori de câte ori nu ești sigur că ai făcut bine, și compară cu panoul Scene.
1. Pregătim proiectul
- În Project Manager apasă Create.
- La Project Name scrie
ColecteazaMonede, fără spații și fără diacritice. - La Renderer alege Compatibility, apoi Create & Edit.
- În panoul Scene apasă 2D Scene. Apare nodul rădăcină.
- Cu el selectat, apasă F2 (redenumește) și scrie
Main. - Ctrl+S → salvează ca
main.tscn.
Main este scena în care se adună toate piesele jocului — cea care pornește când apeși F5.
2. Nodul și scena
Nodul este piesa de bază din Godot. Fiecare tip de nod face un singur lucru: afișează o imagine, detectează o coliziune, redă un sunet, scrie text pe ecran.
Scena este un arbore de noduri, salvat într-un fișier .tscn.
Personajul nostru va arăta așa:
Player [CharacterBody2D]
├── Imagine [Sprite2D]
└── Coliziune [CollisionShape2D]
| Nodul | Ce face |
|---|---|
CharacterBody2D | corpul personajului, mișcat prin cod |
Sprite2D | afișează imaginea |
CollisionShape2D | dă forma fizică, folosită la ciocniri |
3. Relația părinte–copil
Player este părintele. Imagine și Coliziune sunt copiii lui.
Regula care contează:
De aceea Imagine și Coliziune rămân la (0, 0): sunt exact în centrul personajului.
4. Construim scena Player
Personajul se construiește într-o scenă separată, nu direct în Main.
- Scene → New Scene.
- În panoul Scene apasă Other Node, caută
CharacterBody2Dși apasă Create. - Cu nodul selectat, apasă F2 și scrie
Player. Este rădăcina acestei scene. - Cu
Playerselectat, apasă Ctrl+A, adaugăSprite2D, apoi F2 (redenumește) →Imagine. - Selectează
Imagine. Din FileSystem trageicon.svgpeste câmpul Texture din Inspector.
- Cu
Imagineselectat, deschide în Inspector secțiunea Transform. La Scale scrie0.2pentru x și0.2pentru y.
Robotul se micșorează. Imaginea are 128 de pixeli; înmulțită cu 0,2 devine cam 26 — potrivită pentru un personaj care se plimbă prin ecran.
- Selectează din nou
Player(important!), Ctrl+A →CollisionShape2D→ F2 →Coliziune. - Cu
Coliziuneselectat, în Inspector la Shape apasă<empty>și alege New RectangleShape2D. - Apasă pe Shape ca să se deschidă, iar la Size scrie
26pentru x și26pentru y. - Salvează cu Ctrl+S, sub numele
player.tscn.
Arborele trebuie să arate exact așa:
Player
├── Imagine
└── Coliziune
Dacă lângă Coliziune a rămas un triunghi galben ⚠, înseamnă că proprietatea Shape e încă
goală. Reia pasul 8.
5. Coordonatele în 2D
Ca să pui personajul într-un anumit loc, ai nevoie de coordonate.
Într-o scenă 2D poziția are două numere: X și Y.
- Originea
(0, 0)este în colțul stânga-sus - X crește spre dreapta
- Y crește în jos
Fereastra implicită a jocului are 1152 × 648 pixeli, deci centrul ei este la
(576, 324).
Secțiunea Transform a oricărui nod 2D are trei proprietăți:
| Proprietatea | Ce face |
|---|---|
Position | poziția nodului, ca Vector2(X, Y) |
Rotation | rotirea, în grade |
Scale | mărirea sau micșorarea, pe fiecare axă |
6. Punem personajul în joc
Acum legăm cele două scene: player.tscn intră în main.tscn.
- Deschide
main.tscndin FileSystem. - Trage
player.tscndin FileSystem direct în Viewport.
În panoul Scene a apărut un nod Player, cu o iconiță de „claps de film” 🎬 lângă nume, iar
copiii lui nu se văd.
- Selectează
Player, deschide Transform și punePositionlax = 576,y = 324. - Ctrl+S, apoi F5.
Personajul apare în mijlocul ferestrei. Nu se mișcă încă — mișcarea se scrie în cod, în fișa următoare.
Exerciții
🔑 Rezolvare
| Position | Unde ajunge |
|---|---|
(100, 100) | sus-stânga, aproape de colț |
(576, 50) | sus, la mijloc pe orizontală |
(576, 600) | jos, la mijloc pe orizontală |
Regula pe scurt: X mai mic → spre stânga; Y mai mic → în sus.
🔑 Rezolvare
Amândouă. Nu sunt două personaje diferite, ci două instanțe ale aceleiași scene. Ai modificat rețeta, deci s-au schimbat toate copiile făcute după ea.
Aici e câștigul: într-un joc cu 30 de inamici, îi schimbi pe toți dintr-un singur loc.
Șterge al doilea Player și pune Scale înapoi la 0.2 înainte de a merge mai departe.
🔑 Rezolvare
Imaginea s-a decalat cu 50 de pixeli spre dreapta față de formă, iar decalajul rămâne și când muți personajul.
Poziția unui copil se măsoară față de părinte, nu față de ecran. Cei 50 de pixeli sunt „50 la dreapta față de centrul lui Player”, oriunde s-ar afla Player.
De asta imaginea și coliziunea trebuie ținute la (0, 0): altfel personajul se ciocnește
de pereți cu o parte a corpului care nu se vede.
🔑 Rezolvare
main.tscn player.tscn
Main Player
└── Player 🎬 ├── Imagine
└── Coliziune
În main.tscn, Player apare fără copii: nodurile lui sunt „împachetate” în scena separată.
Ce ai învățat
- Un nod face un singur lucru; un obiect din joc se face combinând noduri.
- Copilul se mișcă odată cu părintele, iar poziția lui se măsoară față de părinte.
- În 2D, originea e sus-stânga, X crește spre dreapta, Y crește în jos.
- O scenă salvată poate fi folosită de oricâte ori, ca instanță.
- Modifici scena o dată → se schimbă toate instanțele.
Ai un personaj care stă pe loc. În fișa următoare îl faci să se miște.