Creați un joc Space Invaders în Corona Setup Project

Ce veți crea

În această serie de trei părți, vă voi arăta cum să creați un joc inspirat de jocul popular de șaptezeci, Space Invaders. De-a lungul timpului, veți afla despre funcționalitatea de gestionare a scenelor de la Corona, cronometrele, mutarea unui caracter, motorul fizic încorporat și modul de utilizare a modulelor pentru a emula clase în limba de programare Lua.

1. Proiect nou

Deschide Simulatorul Corona, faceți clic pe Proiect nou, și configurați proiectul după cum se arată mai jos.
Selectați o locație pentru a salva proiectul și faceți clic pe O.K. Acest lucru va crea un dosar cu un număr de pictograme și trei fișiere care sunt importante pentru noi, main.lua, config.lua, și build.settings.
Vom analiza fiecare fișier în următorii pași.

2. Construiți setările

build.settings fișierul este responsabil pentru construirea proprietăților timpului proiectului.
Deschideți acest fișier, eliminați conținutul acestuia și completați-l cu următoarea configurație.

setările = orientation = default = "portrait", suportate = "portrait",,

În build.settings, setăm orientarea implicită și restricționăm aplicația
pentru a suporta doar o orientare portret. Puteți afla ce alte setări puteți include
build.settings prin explorarea documentației Corona.

3. Configurarea aplicației

config.lua fișierul se ocupă de configurația aplicației. Așa cum am făcut-o build.settings,
deschideți acest fișier, eliminați conținutul acestuia și adăugați următoarea configurație.

aplicație = content = width = 768, height = 1024, scale = "letterbox", fps = 30,

Aceasta stabilește lățimea și înălțimea implicită a ecranului, utilizează letterbox pentru a scala imaginile,
și stabilește rata cadrelor la 30. Vizitați documentația Corona pentru a afla mai multe despre celelalte proprietăți pe care le puteți seta config.lua.

4. Punctul de intrare

main.lua fișierul este fișierul pe care se încarcă prima aplicație și îl utilizează pentru a bootstrap aplicația. Vom folosi main.lua pentru a seta câteva setări implicite pentru aplicație și pentru a le utiliza Compozitor bibliotecă pentru a încărca primul ecran.

Dacă nu sunteți familiarizat cu biblioteca Corona's Composer, atunci vă recomand să dați
documentați o citire rapidă. Pe scurt, Compozitorul este soluția încorporată pentru crearea și gestionarea scenelor în Corona. Biblioteca oferă dezvoltatorilor o modalitate ușoară de a crea și de a trece între scenele individuale.

Modulul nou compozitor înlocuiește cel mai vechi și acum depreciat Panoul de editare modul. Un ghid de migrare este disponibil pentru a vă ajuta să convertiți vechile proiecte pentru a utiliza Compozitor.

5. Ascundeți bara de stare

Nu vrem ca bara de stare să apară în aplicația noastră. Adăugați următorul fragment de cod în main.lua pentru a ascunde bara de stare.

display.setStatusBar (display.HiddenStatusBar)

6. Setați puncte de ancorare implicite

Pentru a seta ancorarea implicită sau punctele de înregistrare, adăugați următorul bloc de coduri la main.lua.

display.setDefault ("anchorX", 0.5) display.setDefault ("anchorY", 0.5)


anchorX și anchorY proprietățile specifică unde doriți să fie punctul de înregistrare al obiectelor de afișare. Rețineți că valorile variază de la 0.0 la 1.0. De exemplu, dacă doriți ca punctul de înregistrare să fie la stânga sus a obiectului de afișare, atunci ar trebui să setați ambele proprietăți 0.0.

7. Generator aleatoare de semințe

Jocul nostru va folosi Lua math.random pentru a genera numere aleatorii. Pentru a vă asigura că numerele sunt cu adevărat aleatorii de fiecare dată când aplicația rulează, trebuie să furnizați o valoare a semințelor. Dacă nu furnizați o valoare de semințe, aplicația va genera aceeași dată aleatorie.

O valoare bună a semințelor este Lua os.time deoarece aceasta va fi diferită de fiecare dată când
se execută aplicația. Adăugați următorul fragment de cod în main.lua.

math.randomseed (os.time ())

8. Evitarea globalelor

Atunci când se utilizează Corona și în special limbajul de programare Lua, se utilizează o modalitate de a avea acces la variabilele aplicațiilor global variabile. Modul în care declarați o variabilă globală este prin părăsirea cuvântului cheie local în fața declarației de variabile.

De exemplu, următorul bloc de coduri declară două variabile. Prima este o variabilă locală care ar fi disponibilă numai în blocul de coduri în care este definită. A doua este o variabilă globală disponibilă oriunde în aplicație.

local iamalocalvariable = "local" iamaglobalvariable = "global"

În general, este o practică nepotrivită de a utiliza variabile globale. Motivul cel mai răspândit este evitarea conflictelor de numire, adică a două variabile cu același nume. Putem rezolva această problemă folosind module. Creați un nou fișier Lua, denumiți-l gamedata.lua, și adăugați codul următor.

M =  return M

Noi doar creăm un tabel și îl întoarcem. Pentru a utiliza acest lucru, folosim Lua necesita metodă. Adăugați următoarele la main.lua.

jocul localData = necesită ("gamedata") 

Putem adăuga apoi cheile gameData, care va fi faux global variabile. Uitați-vă la următorul exemplu.

gameData.invaderNum = 1 - Folosit pentru a ține evidența nivelului pe care îl avem gameData.maxLevels = 3 - Numărul maxim de niveluri pe care jocul îl va avea gameData.rowsOfInvaders = 4 - Câte rânduri de invadatori să creați

Ori de câte ori vrem să accesăm aceste variabile, tot ce trebuie să facem este să folosim necesita funcția de încărcare gamedata.lua. De fiecare dată când încărcați un modul utilizând Lua's necesita funcția, acesta adaugă modululla a package.loaded masa. Dacă încărcați un modul, package.loaded tabelul este verificat mai întâi pentru a vedea dacă modulul este deja încărcat. Dacă este, atunci utilizează modulul cache în loc să îl reîncarce.

9. Solicitați compozitorul

Înainte de a putea folosi modulul Compozitor, trebuie să ne cerem mai întâi acest lucru. Adăugați următoarele la main.lua.

compozitor local = necesită ("compozitor")

10. Încărcați scena inițială

Adăugați următorul fragment de cod în main.lua. Aceasta va face ca aplicația să meargă la scena numită start, care este, de asemenea, un dosar Lua, start.lua. Nu este necesar să adăugați extensia de fișier atunci când sunați gotoScene funcţie.

compozitor.gotoScene ("începe")

11. Începeți scenă

Creați un nou fișier Lua numit start.lua în directorul principal al proiectului. Acesta va fi un fișier compozitor, ceea ce înseamnă că trebuie să solicităm modulul Compozitor și să creăm o scenă de compozitor. Adăugați următorul fragment la start.lua.

compozitor local = necesită ("compozitor") scena locală = compozitor.newScene () scena de întoarcere

Apelul la newScene mărci start.lua parte din ierarhia scenelor compozitorului. Aceasta înseamnă că devine un ecran în cadrul jocului, pe care îl putem numi metode compozitor.

De aici, codul a fost adăugat start.lua ar trebui plasate deasupra întoarcere afirmație.

11. Variabilele locale

Următoarele sunt variabilele locale de care avem nevoie pentru start scenă.

local startButton - folosit pentru a porni jocul pulsatingText local = necesita ("pulsatingtext") - Un modul care furnizeaza un efect de text pulsatoriu local starFieldGenerator = necesita (starfieldgenerator) - Un modul care genereaza StarGenerator locale starGenerator - de la starFieldGenerator

Este important să înțelegeți că variabilele locale din piesa principală sunt numite doar o singură dată,
când scena este încărcată pentru prima dată. Când navigați prin scenele compozitorului, de exemplu, invocând metode cum ar fi gotoScence, variabilele locale vor fi deja inițializate.

Acest lucru este important de reținut dacă doriți ca variabilele locale să fie reinitializate când
navigând înapoi la o anumită scenă. Cel mai simplu mod de a face acest lucru este să eliminați scena din ierarhia compozitorului sunând la removeScence metodă. Data viitoare când navigați la acea scenă, va fi reîncărcată automat. Aceasta este abordarea pe care o vom lua în acest tutorial.

pulsatingText și starFieldGenerator sunt două module personalizate pe care le vom crea pentru a adăuga funcționalități asemănătoare clasei proiectului. Creați două fișiere noi în folderul dvs. de proiect numit pulsatingtext.lua și starfieldgenerator.lua.

12. Evenimente Storyboard

Dacă ați avut timp să citiți documentația despre Compozitor, la care am legat-o mai devreme,
veți observa că documentația include un șablon care conține toate posibilitățile
eveniment compozitor. Comentariile sunt foarte utile deoarece ele indică evenimentele care pot influența inițierea activelor, cronometrele etc. Suntem interesați de scena: a crea, scena: spectacol, și scena: ascunde metode pentru acest tutorial.

Pasul 1: scena: a crea

Adăugați următorul fragment de cod în start.lua.

funcția: creați (eveniment) grup local = auto.view startButton = display.newImage ("new_game_btn.png", display.contentCenterX, display.contentCenterY + 100) grup: inserați (startButton)

Această metodă se numește atunci când vizualizarea scenei nu există încă. Aici trebuie să inițializați obiectele de afișare și să le adăugați la scenă. grup este indicată variabila self.view, care este un GroupObject pentru întreaga scenă.

Noi creăm butonul de start folosind Afişa obiecte imagine noua , care ia ca parametri calea către imagine și X și y valori pentru poziția imaginii pe ecran.

Pasul 2: scena: spectacol

compozitor scena: spectacol metoda are două faze. voi faza este apelată atunci când scena este în continuare off-screen, dar este pe cale să vină pe ecran. făcut faza este apelată atunci când scena este pe ecran. Acesta este locul în care doriți să adăugați codul pentru a face scena să vină în viață, să înceapă cronometrele, să adauge ascultătorii de evenimente, să asculte audio etc..

În acest tutorial suntem interesați doar de făcut fază. Adăugați următorul fragment de cod în start.lua.

(precedent) = if (previousScene ~ = nil) atunci compozitor.removeScene (previousScene) se termină dacă (faza == "a făcut") apoi startButton : addEventListener ("atingeți", startGame) sfârșitul final

Declarăm o variabilă locală fază, pe care le folosim pentru a verifica ce fază spectacol metoda este înăuntru. De când ne vom întoarce la această scenă mai târziu în joc, vom verifica dacă există o scenă anterioară și, dacă da, o eliminați. Adăugăm a Atingeți ascultător la butonul de start care sună incepe jocul funcţie.

Pasul 3: scena: ascunde

compozitor scena: ascunde metoda are, de asemenea, două faze. voi faza este apelată atunci când scena este pe ecran, dar este pe punctul de a ieși din ecran. Aici veți dori să opriți orice temporizator, să eliminați ascultătorii de evenimente, să opriți audio etc. făcut faza se numește odată ce scena a ieșit din ecran.

În acest tutorial, suntem interesați doar de voi în care eliminăm Atingeți ascultător de la butonul de start.

funcția scena: ascunde (eveniment) faza locală = event.phase dacă (faza == "va") apoi startButton: removeEventListener ("tap", startGame)

16. Începeți jocul

incepe jocul funcția se numește atunci când utilizatorul pune în funcțiune butonul de start. În această funcție, invocăm gotoScene compozitor, care ne va duce la gamelevel scenă.

funcția startGame () composer.gotoScene ("gamelevel") sfârșitul

17. Scena nivelului jocului

Creați un fișier nou numit gamelevel.lua și adăugați codul următor. Ar trebui să pară familiar. Creăm o nouă scenă și o întoarcem.

compozitor local = necesită ("compozitor") scena locală = compozitor.newScene () scena de întoarcere

18. Adăugați ascultători de scenă

Trebuie să adăugăm ascultători de scenă pentru crea, spectacol, și ascunde metode. Adăugați următorul cod la start.lua.

scena: addEventListener ("creați", scena) scena: addEventListener ("spectacol", scena) scena: addEventListener ("ascunde" 

19. Progresul testului

Dacă încercați acum jocul, ar trebui să vedeți un ecran negru cu un buton pe care îl puteți atinge. Atingând butonul trebuie să te duci la gamelevel scena, care este acum doar un ecran gol.

Concluzie

Aceasta aduce la o parte această parte a seriei. În următoarea parte, vom începe implementarea gameplay-ului jocului. Vă mulțumim că ați citit și vă vedeți în a doua parte a acestei serii.

Cod