1
Motorul Godot - Tutorial Freeway
● Conteúdo:
○ Configurare de proiect
○ A crea cina Player-ului
○ Crea a cena da Linha de Chegada
○ A crea a cena do jogo principal
○ Crea cena mașinilor
○ Creare cina la HUD
● Configurarea proiectului
Managerul de proiect este fereastra care va apărea prima dată când deschizi Godot.
În această fereastră poți vedea o listă a proiectelor tale. Poți alege unul.
proiectați și faceți clic pe „Rulați” pentru a juca un joc existent sau faceți clic pe „Editați” pentru
a lucra la el în Godot.
Cum probabil că încă nu ai niciun proiect, atunci:
● Clique apăsați pe butonul "Proiect Nou". Va apărea fereastra de creare a proiectului;
● Faceți clic pe butonul „Răsfoire” pentru a schimba directorul computerului dvs. unde
dorește să salveze proiectul;
● Introduceți "Freeway" (numele jocului) în "Numele proiectului" și, apoi, faceți clic
em“Create Folder”para criar a pasta do jogo;
● Menține selecionat "OpenGL ES 3.0";
● Clique pe butonul „Creare și Editare”.
2
Pentru a configura dimensiunea ferestrei, accesați „Proiect” > „Setări proiect” > „Afișare”
„Fereastră”. În „Dimensiune”, alterează „Lăț ime” pentru1280Înălțime 720. Em“Stretch”,
coloque "Mod" pentru2dAspect păstrează .
Pentru a importa activele (imagini și sunete), deschideți folderul în managerul de fișiere
de sistemul dumneavoastră de operare și copiați materialele jocului în interiorul dosarului
proiectul tău. O modalitate mai ușoară de a deschide dosarul proiectului este să faci clic cu butonul
drept în dosarul rădăcină („res://”) și în „Deschide în Manager de fișiere”. Vei găsi
activele jocului în AVA.
● Crearea scenei pentru Jucător
Prima scenă care va fi creată va fi Jucătorul. Pentru a adăuga
nod rădăcină al scenei, faceți clic pe butonul "Alt Nod" și adăugați
o notăZona2Dla cină. CuArea2Dputem detecta
obiecte care se suprapun sau se ciocnesc cu Jucătorul.
Acum că am definit nodul rădăcină al scenei, putem adăuga
noi suplimentare pentru a oferi mai multe funcționalități. Adăugați
următoarele noduriSpriteAnimat, FormaColiziune2De
AudioStreamPlayer2Dca fiii noduluiZona2D.
3
Renumește nodurile:Zona2DparaJucător,
SpriteAnimat para Animatie;
FormaDeColiziune2D paraColiziune e
AudioStreamPlayer2DparaAudio. O Godot
va afișa un pictogramă de avertizare (în galben) lângă
nódul din arborele de scenă. Vom schimba
proprietăți ale nodurilor pentru ca aceste alerte să fie
removidos.
Fă clic pe nodAnimatie(AnimetedSprite) e vá em
"Cadre">"SpriteFrames noi". Va apărea o
raftul din partea inferioară pentru a configura a
animarea Spritelor. Dând clic pe "Nou
Animaț ie, adaugă două animaț ii:vârfule
jos.
În fiecare dintre animații, trage Sprites
(din interiorul dosarului "assets/galinha/cima" și
assets/galinha/baixo în managerul de fișiere
pentru zona de „Cadru de animație”. Schimbă „Viteză”
para8e diminua dimensiunea Sprites-urilor, schimbând
„Scale”para0.3emxe emy.
4
Faceți mergi la "Shape" > "New CircleShape2D".
clic pe nodColiziune(CollisionShape2D)
Altere dimensiunea cercului de coliziune creat astfel încât să acopere tot Sprite-ul.
pui. Fă clic pe nodAudio(AudioStreamPlayer2D) e arraste o áudio care se redă
som de colisão ("assets/sons/[Link]") pentru proprietatea "Stream".
Pentru a crea un script în scenăJucătorfaceți clic dreapta pe nodul rădăcină
(Jucător) dați clic pe „Atașați Script”. Scrieți codul jucătorului, așa cum este în fragmentul de
codul de mai jos.
extindeZona2D
exporta viteza = 100
varscreen_size
varposicao_inicial =Vector2(640, 690)
punct de semnal
func_ready():
screen_size =get_viewport_rect().size
funcț ie_procesează(delta):
varvelocity = Vector2()
dacăInput.is_action_pressed("ui_up"):
viteza.y -= 1
dacaInput.is_action_pressed("ui_down"):
viteza.y += 1
5
viteza = [Link]ă() * viteză
dacă lungimea vitezei > 0:
$[Link]()
altfel:
$[Link]()
dacă viteza.y > 0:
$[Link] = "baixo"
altfel:
$[Link] = "cima"
poziț ia += viteza * delta
position.y = clamp(position.y, 0, dimensiunea_ecranului.y)
func_on_Player_body_entered(body):
[Link] == "LinhaChegada":
emise_semnal("pontua")
altfel:
$[Link]()
position = posicao_inicial
OBS: Pentru a conecta semnalul „body_entered” în scriptul deJucător, faceți clic pe Jucător,
„Node”>„body_entered”>„Connect”>„Player”>„Connect”. A declarația da
funcția va fi creată singură (nu tastați, conectați). Dar pentru a testa funcția
“_on_Player_body_entered”será necessário criar primeiro a cena da Linha de
Sosire. Salvează scena.
● Crearea scenei Liniei de Sosire
Creează o nouă scenă („Adaugă o nouă scenă”) și introdu un
nodRigidBody2Dca tată al scenei. Renumește-l în
Linia de sosireși adaugă ca doi copii: unulSprite
e umFormaDeColiziune2D.
Em Sprite daLiniaDeSosire, trage imaginea
„ assets/[Link]” pentru „ Textură”Sprei. Em
FormaDeColiziune2DdeLinieDeSosire, mergi la "Formă"
„Noua RectangleShape2D” ajustează o formă de
coliziune în imagineaSprite.
Agora da é posibil a percepe a funcție
_on_Player_body_entered" detectând coliziunea
când găina trece linia de sosire.
6
Faceți clic peLiniaFinală(RigidBody2D) mergi la „Gravity Scale” și schimbă-l la 0.
Salut la cină.
● Crearea scenei jocului principal
Creează o nouă scenă cu un Nod ca rădăcină. Pentru asta, fă clic pe „Adaugă un nou
scene" > "Alt Nod" > "Nod". Renumeș te unNodparaPrincipal. Insira ca fiu de
PrincipalumSpritee chame-o de PistaÎncărcați imaginea, trăgând
„assets/[Link]” pentru proprietatea „Textură” dePista. Această imagine
reprezintă un fundal al jocului și are mai multe indicii.
Adaugă scenaJucătorca un alt fiu dePrincipal. Pentru asta, faceți clic pe "Instanță
Scena copilului">"cenas/[Link]">"Deschide". Fă acelaș i proces pentru a insera o
cenaLinia de sosireca fiu dePrincipal.
Faceți clic pe nod Pista(Sprite) debifați opțiunea „Offset” > „Centered”, în dock-ul
inspector, asta va alinia Sprite-ul cu ecranul jocului.
Faceți clic pe nod JucătorfiulPrincipal) e em “Transform”>“Poziție”, alterează valoarea de
x e y pentru640e690, respectiv. Aceasta va poziționa corect găina în
hartă. Salvează o scenă.
7
● Creează scena ma ș inilor
Adăugați o nouă scenă pentru a reprezenta
toate mașinile. Pentru aceasta, faceți clic pe
„Adaugă o nouă scenă” > „Alt Nod” e
insera unRigidBody2Dca rădăcină a
copacul scenelor cu mașini. Ca niște copii,
adăugați un arbore: unSpriteAnimat,
umCollisionShape2D e um
NotifierVizibilitate2DFigura de mai sus
arată cum va arăta arborele de scenă al
mașini, după ce au fost redenumite nodurile.
Faceți clic peCarros
(RigidBody2D) se duce în
"Scară de Gravitație" este schimbată la 0.
Faceți clic peAnimatie(AnimatedSprite) se duce în
"Frames" > selecționează "SpriteFrames Noi" >
clic pe „SpriteFrames” și un sertar de
animația va fi deschisă (acest proces este același
făcut în scena deJucător). La paste
"assets/carros" există 14 sprite-uri diferite de
carros. Crie uma animação para cada uma das
sprites de carro.
Pentru fiecare dintre cele 14 sprite-uri de
mașini, creează o nouă animație.
Faceți clic pe „Nouă animație” și redenumiți
prima animație pentrucarros01.
Faci asta pentru toate celelalte mașini,
obținând 14 animații denumite
cum:carro01, carro02, carros03,
…, carros14.
Încă com o nodAnimatie
(AnimatedSprite) selectat mergi în
“Transform” > “Rotation Degree” e
altere pentru90e em „Transformați” >
„Scale” e altere para0.2, atât în x
cât în y.
Cliqeu nu nodColiziune
(CollisionShape2D) e vá em “Shape” >
8
„New RectangleShape2D” acoperă un sprite de mașină cu dreptunghiul de coliziune.
Salvează o cină.
Anexezi un script în scenăMaș ini. Pentru asta, faceți clic dreapta pe Maș inie
faceți clic pe "Atașați scriptul". Scrieți codul scenei, așa cum este în fragmentul de cod
mai jos.
extindeRigidBody2D
func_ready():
vartipos_carros =$[Link].get_animation_names()
varcarro = tipos_carros[randi() % tipos_carros.size()]
$[Link] = carro
funcț ia_on_Notificador_screen_exited():
queue_free()
● Crearea scenei HUD
Adăugați o nouă scenă pentru a reprezenta
HUD-ul jocului. Faceți clic pe "Adaugă o nouă scenă" >
„ Alt Nod” e insira unStraturiCanvascum
raiz e adicione ca copii următorii noduri:
doi noduri de tipEtichetă, un nod de tipButon.
Renumește oStratulCanvasparHUD, umEtichetă
paraPlăcare altcevaEtichetăparaMesaj.
9
Faceti clic pe nodul Placar și modificați proprietățile:
Text para 0
Aliniere para centru e "Valign" pentru centru
Rect > “Size” > “x” para 100 e “y” para 60.
Layout CentruSus
○ Pentru a modifica fontul, mergeți la „Teme Override” > „Fonturi” > „Font” (care
este gol) > „Nou FontDinamic” > „Font” > „Date Font” > „Încărcați” >
Selectați fontul "assets/[Link]";
○ „Tema de suprascriere” > „Fonturi” > „Font” > „Setări” > „Mărime” alterează o
dimensiunea fontului pentru 32.
Fă clic pe nodul Mesaj și modifică proprietățile:
Text Jucătorul a câștigat!
Aliniază para centru e “Valign” pentru centru;
Rect > “Position” > “x” para 390 e “y” para 170;
Rect > “Size” > “x” para 500 e “y” para 100.
○ Pentru a schimba fontul, mergeți la „Teme Override” > „Fonturi” > „Font” (car
este gol) > "Font DinamicNou" > "Font" > "Date Font" > "Încărcare" >
Selectați fontul „assets/[Link]”;
○ „Teme Override” > „Fonturi” > „Font” > „Setări” > „Dimensiune” alterează o
dimensiunea fontului pentru 32.
10
Clic pe nodul Buton și modifică proprietățile:
○ "Text" Reporniți
Aliniază centru para
Rect > “Size” > “x” para 400 e “y” para 120
Aspect centru
○ Pentru a schimba fontul, mergeți la „Teme Override” > „Fonturi” > „Font” (car
este gol) > „Nou DynamicFont” > „Font” > „Date Font” > „Încărcare” >
Selectați fontul „assets/[Link]”;
○ „Teme Suprascriere” > „Fonturi” > „Font” > „Setări” > „Dimensiune” modifică un
dimensiunea fontului pentru 32.
Faceți clic dreapta pe nodul HUD > „Atașați
scriptul” și copiați următorul fragment de
código de mai sus. Atenție: a declarația
că Amintește-ți funcției
“_on_Button_pressed” não é digitada e sim conectada.
extendsCanvasLayer
segnalare reinicia
func_on_Button_pressed():
emit_signal("reinicia")
● Crearea scenei jocului principal (continuare)
Adăugați încă două noduri de tipCronometruna cena da
Principal. Pentru asta, faceți clic pe „Adăugați nod copil”>
„Cronometru”. Primul cronometru redenumiț i în
TimerMasiniRapidee un al doilea cronometru pentru
TimerCarrosLento.
Faceți clic peTimerMasiniRapideAșteaptă
Timp0.3activează opțiunea „Autostart”.
Faceți clic peTimerCarrosLentosAșteaptă
Timp0.5activati opțiunea „Autostart”. Cu
oTimerMaș iniRapidselectat, faceți clic pe
„Node” (în dock-ul Inspector) > „timeout()” >
„Conectează-te”>„Principal”>„Conectează-te”. Fă acelaș i lucru
pentru oTimerCarrosLento.
11
Cliquează pe „Adaugă nod copil” > „AudioStreamPlayer” > „Creează” și adaugă 3 noduri de tip
„AudioStreamPlayer” ca fiu dePrincipal. Renumește nodurile în:AudioTema,
AudioPontoeAudioVitoriaFaceți clic peAudioTema>“Stream”>“Load”>
„[Link]”. Dă clic peAudioPonto „Flux” > „Încărcați” > „[Link]”. Faceți clic pe
AudioVitoria>“Stream”>“Load”>“[Link]”.
Anexe un script în scenăPrincipal. Pentru asta, faceți clic dreapta pePrincipale
dați clic pe "Atașează script".
La masăPrincipal, faceți clic peJucător„Nod” (în inspectorul de andocare) > „punctual()”>
„Conectează”>„Principal”>„Conectează”. Aceasta va conecta semnalul „punctua” care a fost creat în
cina deJucător.
12
La cinăPrincipal, faceți clic peHUD>“Node”(na dock inspector) >“reinicia()”>“Connect”
„Principal”>„Conectează”. Aceasta va conecta semnalul „resetează” care a fost creat în scena deHUD.
Copiați codul scenei, așa cum este în fragmentul de cod de mai jos. OBS: Acest cod încă
va fi crescut.
extindeNod
constCENA_CARROS = preload("res://cenas/[Link]")
varpistas_rapidas = [104, 272, 488]
varpistas_lentas = [160, 216, 324, 384, 438, 544, 600]
varscore = 0
func_ready():
$[Link]()
$HUD/[Link] = ""
$HUD/[Link]()
randomize()
func_on_TimerCarrosRapido_timeout():
varnovo_carro = CENA_CARROS.instance()
adauga_fiu(nou_masina)
varpista = pistas_rapidas[randi() % pistas_rapidas.size()]
novo_carro. poziț ia = Vector2(-10, pistă)
novo_carro.velocitate_lineară.x = rand_range(700, 710)
novo_carro.linear_damp = -1
func_on_TimerCarrosLento_timeout():
varnovo_carro = CENA_CARROS.instance()
adauga_fiu(nou_masina)
varpista = pistas_lentas[randi() % pistas_lentas.size()]
13
novo_carro.position =Vector2(-10, pista)
novo_carro.linear_velocity.x =rand_range(300, 310)
novo_carro.linear_damp = -1
func_on_Player_pontua():
scor += 1
dacă scorul >= 10:
$[Link]()
$[Link]ă()
$[Link]()
$[Link]()
$HUD/[Link] = "Player Ganhou!"
$HUD/[Link]()
altele:
$HUD/[Link] =str(score)
$[Link]()
func_on_HUD_reinicia():
score = 0
$[Link] = $Player.posicao_inicial
$[Link]()
$[Link]()
$[Link]()
$HUD/[Link] = ""
$HUD/[Link] = "0"
$HUD/[Link]()
OBS: Amintiți-vă că declarațiile funcțiilor care încep cu „_on_...”
trebuie să fie conectate.