Bine ați venit la ultima tranșă din seria Endless Runner. În tutorialul de astăzi, veți învăța cum să construiți un meniu de joc utilizând clasa Director. Să începem!
Felicitări pentru a veni atât de departe în serie! A fost o lungă perioadă de timp, dar acum avem un joc pe deplin funcțional și, sperăm, o înțelegere de bază a modului în care puteți adăuga propriile componente pentru a vă extinde totul. Pasul pe care o vom face acum este să punem micul nostru nivel într-un sistem de meniuri, astfel încât să se simtă ca un joc complet.
Vom face acest lucru folosind clasa director, care este o bibliotecă incredibil de bine făcută de Ricardo Rauber, care va face toată munca pentru dvs. Odată ce ați vedea cât de ușor este de râs ușor, veți putea implementa acest lucru rapid în orice proiect.
Primul lucru pe care trebuie să-l faceți este să mergeți aici și să descărcați cea mai recentă versiune a clasei. Când îl descărcați, vă va da o mulțime de fișiere. Acesta vine cu mult mai mult decât clasa director, inclusiv exemple, șabloane și funcții suplimentare care vă pot ușura viața, deci nu ezitați să verificați tot ce are de oferit. Dacă nu doriți toate extra distracție oferite, puteți descărca pur și simplu fișierele pentru acest tutorial și apuca de acolo.
Acum, că avem fișierul director.lua, puneți-l în același director ca și directorul principal.lua. Vorbind despre fișierul principal.lua, continuați și redenumiți-l. Nu contează ce schimbați, deoarece vom termina oricum să o ștergem. După ce ați făcut acest lucru, veți face trei fișiere noi în acel dosar. Sunați-le main.lua, menu.lua și game.lua. Elementele de bază ale modului în care aceasta va funcționa este aceea că main.lua va fi chemat să înceapă jocul. Acesta va fi baza programului nostru, în timp ce menu.lua și game.lua vor acționa ca și componente (displayGroups) care sunt afișate într-un grup de afișare în interiorul main.lua în sine, la fel ca toate celelalte Afișează grupuri în jocul nostru sunt toate ținute și afișate din cadrul ecranului DisplayGroup în jocul nostru actual.
Deci, mai intai lucrurile, sa ne pregatim noul fisier main.lua. Deschideți-l și completați acest cod acolo:
display.setStatusBar (display.HiddenStatusBar) - prin a spune Corona să solicite "director" suntem - căutând să includă totul în acel fișier, - dându-ne acces ușor la funcțiile sale. Acesta este - de asemenea, cum ați include orice funcții sau "clase" pe care le-ați creat în fișierele aflate în afara. directorul local = solicita ("director") mainGroup = display.newGroup () local main = function () - aceasta creeaza o vizualizare pe care o vom folosi pentru a incarca celelalte scene, noi rămânem în fișierul principal.lua - și doar încărcăm noi vederi sau scene în el mainGroup: insert (director.directorView) - le spunem directorului să încarce prima scenă care - va fi directorul de meniu: changeScene ("meniu") end - asigurați-vă că ați apelat efectiv funcția principală principală ()
Așa este! Luați comentariile și veți vedea că durează doar 5 linii pentru a intra în funcțiune clasa director. Așa cum se spune în comentarii, modul în care funcționează de fapt este main.lua, dar apoi, în loc de a fi dictat fluxul jocului în fișierul principal.lua, lăsăm clasa directorului să preia controlul. Creăm un display.newGroup și îl rezervăm drept vedere principală. Deci, atunci când jocul se încarcă, tot ceea ce vedeți este de fapt văzut din fișierul principal.lua din interiorul acestui grup de afișare. Foarte curat, huh! Deci, odată ce ați introdus acea viziune în ea, trebuie doar să îi spunem regizorului care scenă să se încarce și ne va duce automat acolo. Destul de ușor, corect?
Următorul lucru pe care trebuie să-l facem pentru ca acest lucru să funcționeze este să aveți o scenă de meniu. Codul este foarte simplu și majoritatea pe care l-am văzut deja, așa că voi posta primul fișier și apoi vom explica câteva lucruri noi. Să deschidem menu.lua și să vedem cât de ușor este crearea unui sistem simplu de meniuri. Copiați următoarele în meniul dvs.:
--această linie este necesară pentru ca directorul să știe că - aceasta este o scenă care poate fi încărcată în modulul său de vizualizare (..., pachet.aspect) - trebuie să putem accesa clasa de director a cursului astfel încât să fie sigur că include aici directorul local = solicită ("director") local sprite = necesită ("sprite") - tot ce vrei să faci această scenă ar trebui să fie - inclus în noua funcție. De fiecare dată când regizorul - încarcă o nouă scenă, va arăta aici pentru a afla ce - pentru a încărca. new = function (params) - aceasta functie va fi returnata la meniul directorului localDisplay = display.newGroup () - totul de aici in jos pana la linia de retur este ceea ce face - scena asa ... merge nebun background local = display .newImage ("background.png") background.x = 240 background.y = 160 local spriteSheet = sprite.newSpriteSheet ("monsterSpriteSheet.png", 100, 100) local monsterSet = sprite.newSpriteSet (spriteSheet, .add (monsterSet, "running", 1, 6, 600, 0) monstru local = monstru sprite.newSprite (monsterSet): monstru: play () monster.x = 60 monster.y = 200 local monster2 = monster2.y = 200 monster2.xScale = monster2.xScale * -1 titlu local = display.newImage ("titlu") .png ") title.x = 240 titlu.y = 80 playButton = display.newImage (playButton.png) playButton.x = 240 playButton.y = 220 meniuDisplay: inserare (fundal) meniuDisplay: inserare (monstru) : Inser t (monster2) meniuDisplay: inserați (titlu) meniuDisplay: inserați (playButton) - asta este ceea ce se numește atunci când playButton este atins - singurul lucru care se face nu este apelarea tranziției - de la această scenă la scena jocului " downFlip "este - numele tranziției pe care regizorul o folosește pe butonul funcțional localListener (eveniment) director: changeScene (" joc "," downFlip ") returnează sfârșitul real - acesta este un mod diferit de a detecta atingerea lucrări - pentru butoane. Pur și simplu adăugați eventListener la obiectul de afișare - care este butonul trimite evenimentul "touch", care va apela funcția --buttonListener de fiecare dată când displayObject este atins. playButton: addEventListener ("atingeți", butonulListener) - reveniți la grupul de afișare la sfârșitul meniului de întoarcereSistem final
Un lucru care este nou aici este directorul: changeScene () line. Este destul de drept înainte, deoarece face exact ceea ce credeți că ar fi. Cu toate acestea, am vrut să subliniez al doilea parametru, "downFlip". Există o mulțime de tranziții construite care pot face jocul dvs. să arate cu totul fantezie atunci când comutați între scene, depinde doar de ce doriți să arate jocul dvs. Iată o imagine a tranziției noastre în desfășurare.
Asigurați-vă că ați încercat câteva tranziții diferite pentru a găsi cel care va funcționa cel mai bine pentru jocul dvs. Puteți găsi o listă completă a acestora în fișierul director.lua. Uitați-vă la toate efectele diferite și dați-le un vârtej. Un cuplu mai multe exemple pe care le puteți încerca rapid dacă nu doriți să mergeți săpat sunt "crossfade", "overfromtop" și "flipFromBottom" pentru a numi doar câteva! Deci, pe lângă asta, există foarte puține lucruri pe care nu le-ați mai văzut până acum. Toate chestiile astea fac doar un mic ecran ieftin. Există câteva lucruri pe care ar trebui să le țineți cont de faptul că va fi necesar în fiecare scenă pe care directorul are nevoie. Primul fiind:
modul (..., pachet.aproape)
Pur si simplu. Aveți nevoie de acea linie exactă în partea de sus a fiecărui fișier * .lua pe care directorul o va folosi ca scenă. După aceasta aveți funcția nouă () care se numește la intrarea în scenă și tot ceea ce doriți să faceți scena trebuie să fie inclus aici. Primul lucru pe care trebuie să-l faceți este să creați un displayObject care va fi returnat directorului care va fi afișat, apoi asigurați-vă că îl returnați la sfârșitul noii funcții. Asta e tot. Sunet ușor? Asta pentru că este! Clasa directorului o face foarte ușor. Atâta timp cât imaginile sunt în locul potrivit pentru scena meniului, ar trebui să puteți rula fișierul principal.lua și să îl porniți fără probleme.
Până acum avem fișierul principal și fișierul nostru de meniu principal îngrijit. Ultimul lucru pe care trebuie să-l facem este să facem niște modificări în fișierul nostru de joc. Acest lucru va fi, de asemenea, ușor. Deschideți fișierul game.lua și adăugați următorul cod:
modul (..., package.seeall) directorul local = solicita ("director") new = funcția (params) localdeDisplay = display.newGroup
Acestea sunt barele goale de ceea ce aveți nevoie pentru o scenă. De altfel, acest lucru este tot ce aveți nevoie pentru a obține vechiul fișier principal.lua în fișierul game.lua. Odată ce ai acolo, singurul lucru pe care trebuie să-l faci este să copiezi întregul vechi fișier principal.lua și să îl lipiți acolo unde se spune codul de paste aici. Faceți asta și ați terminat ... aproape. Vom face, de asemenea, câteva schimbări în modul în care afișăm jocul peste mesaj. Mai degrabă decât având un buton mare, o vom rupe în mai multe butoane mai mici, care ne permit să reluăm jocul sau să ne întoarcem la meniu. Să începem să facem unele dintre aceste modificări (rețineți că gameOver.png a fost modificat pentru a se potrivi cu aspectul noului buton. Dimensiunile imaginii sunt în continuare aceleași, astfel încât nu ar trebui să faceți alte ajustări). Primele schimbări vor fi adăugarea noilor butoane în joc.
Adăugați acest cod la locul în care adăugăm toate celelalte imagini din partea de sus a fișierului:
local yesButton = display.newImage ("yesButton.png") yesButton.x = 100 daButton.y = 600 local noButton = display.newImage ("noButton.png") noButton.x = 100 noButton.y = 600
Apoi asigurați-vă că le adăugați și pe ecran. Adăugați-le după celelalte inserări ale ecranului, astfel încât acestea să apară pe toate celelalte:
ecran: introduceți (yesButton) ecran: inserați (noButton)
Următorul lucru pe care doriți să-l faceți este să mergeți la funcția atured () și să eliminați prima instrucțiune if / else astfel încât să arate astfel:
funcția atinsă (eveniment) dacă (monster.isAlive == true) atunci dacă (event.phase == "a început") atunci dacă (event.x < 241) then if(onGround) then monster.accel = monster.accel + 20 end else for a=1, blasts.numChildren, 1 do if(blasts[a].isAlive == false) then blasts[a].isAlive = true blasts[a].x = monster.x + 50 blasts[a].y = monster.y break end end end end end end
Făcând acest lucru face ca funcția atinsă să fie cea care se ocupă pur interacțiuni în joc. Vom muta logica care repornește jocul la propria sa funcție. Adăugați aceste funcții sub funcția atinsă ():
funcția noListener (eveniment) director: changeScene ("meniu", "downFlip") return funcția adevărată finală yesListener (eveniment) restartGame ()
Deci, destul de drept înainte, și același lucru pe care l-am făcut de mai multe ori acum. Apoi trageți în josul codului în care adăugăm ascultătorii evenimentului și adăugați încă doi ascultători:
daButton: addEventListener ("ating", daListener) noButton: addEventListener ("atinge", noListener)
Așadar, ultimele lucruri pe care trebuie să le facem sunt reprezentate de modificările poziției față de cele două butoane atunci când monsterul nostru moare și când ne reinițializăm jocul. Iată completările pe care trebuie să le includem pentru a ne asigura că funcționează corect. În funcția restartGame () adăugați aceasta:
noButton.x = 100 noButton.y = 600 daButton.x = 100 daButton.y = 600
Apoi mergeți la funcția checkCollisions (), unde ar trebui să vedeți aceste rânduri de mai multe ori:
jocOver.x = display.contentWidth * .65 gameOver.y = display.contentHeight / 2
Adăugați acest bloc exact sub fiecare instanță a acestuia (ar trebui să fie 4 în totalitate, câte unul pentru fiecare mod de a muri):
daButton.x = display.contentWidth * .65 - 80 daButton.y = display.contentHeight / 2 + 40 noButton.x = display.contentWidth * .65 + 80 noButton.y = display.contentHeight / 2 + 40
Odată ce veți avea toate aceste modificări, ar trebui să puteți începe jocul din main.lua și să vă puteți muta din meniul principal în joc, să muriți și apoi să alegeți dacă doriți să jucați din nou sau să reveniți la meniul. Deci, presupunând că totul este bine, acesta este sfârșitul, acum jocul nostru sa mutat într-un sistem de meniuri folosind clasa director! Ne-am mutat foarte repede prin majoritatea acestora, motivul fiind acela că în realitate nu a existat prea mult conținut nou. Dacă aveți probleme cu oricare dintre pașii, anunțați-mă în comentariile și vă voi ajuta să lucrați prin ele. Dosarul nou din fișierul descărcat conține, de asemenea, produsul finit, de asemenea, astfel încât să îl puteți folosi întotdeauna ca referință. Sperăm că această serie de tutorial a fost benefică pentru dvs. în obținerea a început în dezvoltarea jocului cu SDK Corona, după cum puteți vedea că procesul general este într-adevăr foarte simplu. Corona SDK este puternică și foarte prietenoasă odată ce obțineți elementele de bază. Sperăm că acum puteți merge mai departe și puteți face unele jocuri minunate.
Va exista un tutorial mai mult pentru această serie, dar nu va schimba jocul oricum, dar se va concentra pe depunerea jocului dvs. la magazinul de aplicații, deoarece aceasta este întotdeauna o aventură care o face prima oară. Atât de fericit de codat și mulțumesc pentru urmărirea de-a lungul!