Î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.
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.
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.
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.
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.
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)
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.
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 ())
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.
Î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")
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")
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.
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.
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.
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.
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.
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)
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
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
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"
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.
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.