Portarea Jocuri ActionScript în iOS cu SDK Corona Partea 1

Acest tutorial va arunca o privire asupra portării unui joc Flash / Flex pe SDK-ul Corona. În mod specific, vom porta de la ActionScript la Lua, cu obiectivul final de a juca jocuri de tip Flash numai pe iPhone. Pe lângă demonstrarea limbajului și a diferențelor API, această serie de tutori va explica și restricțiile hardware, cum ar fi dimensiunea ecranului și lipsa butoanelor fizice pe iPhone.

Ce este Corona?

Înainte de a intra în codificarea reală, aș dori să ofer o imagine de ansamblu rapidă a software-ului pe care îl vom folosi
utilizați. Corona SDK este un produs de către Ansca Mobile pentru crearea de jocuri pentru iPhone, iPod Touch, iPad și dispozitive Android. La momentul acestei scrieri, există o versiune gratuită nelimitată a kitului disponibil aici. Acesta include toate funcționalitățile versiunii plătite, cu excepția publicării în magazinele respective de aplicații ale dispozitivelor iPhone și Android. Acest tutorial va face o mare introducere în puterea și eficiența Corona.

Jocul

În acest tutorial, vom porta un joc alimentat de flixel de Andreas Zecher. Acest joc a fost creat cu tutorialul lui Andreas pe biblioteca open-source flixel și limba ActionScript. Codul original este disponibil aici (Andreas a fost destul de amabil să-l elibereze ca open source). Dacă sunteți interesat în a face jocuri flash, asigurați-vă că pentru a verifica tutorialul original. Există câteva informații utile acolo!

Lua Limba

Kitul de dezvoltare software al Ansca Mobile folosește limbajul de programare și își extinde API-ul. Lua este un limbaj foarte curat. În timp ce servim pentru începători, am descoperit că este foarte puternic, cu foarte puține coduri. Lua nu este unul
un limbaj orientat pe obiecte, dar poate fi făcut să urmeze modelul orientat pe obiect cu unele reglaje fine.

Având în vedere acest lucru, să aruncăm o privire la primul nostru obstacol: Lua este sintactic diferit de ActionScript.

Variabilele din Lua sunt tratate diferit decât în ​​ActionScript. În ActionScript, variabilele sunt tipărite static. Aceasta înseamnă că ei declară tipul lor și stochează doar valori de acel tip decât dacă au fost convertite în mod explicit.

? privat var _ship: nava; // Variabilele declară tipul lor. Această variabilă este de tipul "Nava" privată var _aliens: FlxGroup; private var _bullets: FlxGroup; privat var _scoreText: FlxText; privat var _gameOverText: FlxText; privat var _spawnTimer: Număr; privat var _spawnInterval: Number = 2.5;? 

În lua, variabilele sunt tastate dinamic. O variabilă Lua poate conține orice tip în orice moment. O alta
lucru de observat este că variabilele din Lua sunt fie locale, fie globale. O variabilă este locală
(accesibilă numai) la fișierul .lua sau funcția sa etc., dacă este prefixată cu "local" la
declarația variabilei. În caz contrar, este considerat "global" în domeniul de aplicare. Cea mai bună practică în Lua este de a folosi întotdeauna
variabilele locale. Acest tutorial va adera la această practică.

? - Variabilele nu își declară tipul. Această variabilă ar putea fi o "navă" sau ar putea fi - un șir. Mai târziu, ar putea fi folosit pentru a stoca un întreg sau o matrice. local _aliens local _bullets local _scoreText local _gameOverText local _spawnTimer = nil - Această variabilă are o atribuire și o declarație pe aceeași linie. local _spawnInterval = 2.5 - Asa face si asta? 

Așa cum probabil ați observat deja, comentariile sunt tratate diferit în Lua decât în ​​ActionScript.

 // Acesta este un comentariu in ActionScript / * Acesta este un comentariu multiline in ActionScript * /
 -- Acesta este un comentariu în lua - [[Acesta este un comentariu multiline în lua -]]

Un lucru important de știut despre comentariile din Lua este că totul după "-" este un comentariu în afara
pentru "--[[". Acest lucru permite un truc elegant. Dacă adăugați o bordură suplimentară la începutul multilinei
comentariu "--- [[", comentează versiunea multilaterală. Acest lucru se întâmplă pentru că totul după primul
două liniuțe este un comentariu. Acum uita-te la comentariul final "-]]". Acesta este deja un comentariu, pentru că și el
este după două liniuțe. Acest lucru devine efectiv o comutare pentru a opri și pe biți de cod!

 --[[Acesta este un comentariu -]] --- [[Acesta este codul și va fi executat ca atare. În acest caz, o eroare ar fi aruncată. -]]

Buclele, parantezele și operatorii sunt definiți prin cuvintele din Lua:

 // ActionScript dacă (_spawnTimer < 0)  spawnAlien(); resetSpawnTimer(); 
 -- lua dacă (_spawnTimer < 0) then spawnAlien() resetSpawnTimer() end

Lua folosește "if-then", "else", "elseif-then", "end", "și", "sau" etc.
punct și virgulă pentru a termina fiecare linie. Fără toate parantezele și punct și virgulă, codul Lua arată mult mai mult
cum ar fi limba engleză decât alte limbi de programare.

Unul dintre lucrurile pe care trebuie să le observăm înainte de a începe este că Lua nu are suport pentru comenzile rapide de atribuire.

 // ActionScript _spawnInterval * = 0,95; // Acest lucru este permis în ActionScript
 -- lua _spawnInterval * = 0.95 - Aceasta va duce la o eroare în lua _spawnInterval = _spawnInterval * 0.95 - Acesta este codul corespunzător Lua

Început de portare

Acum, când înțelegem câteva dintre diferențele fundamentale dintre ActionScript și Lua, putem începe
procesul de transfer al jocului între ele. Codul sursă pentru acest tutorial și atașat la această postare include
codul sursă original și codul final pentru proiectul de astăzi.

Sintaxă

Pentru a ușura portarea pe drum, vom începe prin a converti întreaga sintaxă din sursa noastră
fișiere, fără să ne referim la logica reală a aplicațiilor. În acest fel, când vom începe să lucrăm la logică, vom
codul va fi deja formatat corect. Să începem procesul cu fișierul Main.as, care arată
ceva de genul:

 pachet import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [FrameClass = "Preloader"]] 1); 

Nu este prea mult de făcut aici. Nu avem nevoie de declarația "pachet", pentru a elimina liniile de sus și de jos ale codului.

 import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [FrameClass = "Preloader"]] 1); 

Din moment ce Lua nu are clase, putem elimina linia "clasa publica Main extinde FlxGame" si este
paranteze corespunzătoare.

 import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640", backgroundColor = "# ABCC7D")] [cadru (factoryClass = "Preloader")] funcția publică Main (): void super; 

Acum putem lucra la funcția Main (). Mai întâi de toate, observați declarația "publică" a metodei.
Lua nu are tipuri separate de funcții, așa că putem elimina asta. Amintiți-vă că în lua, funcții
nu declarați tipul de retur. Există un cuvânt cheie ": void" la sfârșitul declarației funcției.
Aceasta înseamnă că această funcție nu va reveni la o valoare care nu este necesară în lua. Așa că putem scăpa
aceasta. Poate doriți să-l comentați pentru referință mai târziu. În cele din urmă, scoateți brațele în jurul
Principal(). În lua, folosim cuvinte. Adăugați "sfârșit" la sfârșitul funcției.

 import org.flixel. *; import de.pixelate.flixelprimer. *; [SWF (width = "640", fundalColor = "# ABCC7D")] [Frame (factoryClass = "Preloader")] funcția Main () -: void super (640, 480, PlayState, 1); Sfârșit

Pentru a încheia lucrurile, eliminați toate punct și virgulă ";" și să comenteze toate liniile de cod. Acest
, putem începe să pornim logica fără a obține erori.

 --importul org.flixel * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader" funcția principal () -: void - super (640, 480, PlayState, 1) - sfârșit

În acest moment, veți dori să creați un dosar de proiect pentru a ține fișierele. Am sunat pe a mea
"Alien_shooter". Acesta este dosarul pe care îl veți trece la Corona când sunteți pregătit să vă executați
cod. În interiorul dosarului, Corona caută fișierul "main.lua". Corona are sensibilitate la litere mici, deci tu
nu trebuie să valorificați prima literă ca în "Main.as". Salvați codul de mai sus ca principal.lua.

Să trecem la următorul fișier. Astăzi, vom lucra numai cu două fișiere sursă. Al doilea
fișierul este situat la "de / pixelate / flixelprimer / PlayState.as" în codul sursă atașat. Acest fișier este locul unde se află
toate gameplay-ul este manipulat. Ca atare, este cel mai lung dosar. Vom modifica sintaxa în bucăți mici.
La fel ca fișierul principal, acest cod are o declarație de pachet și clasă. Îndepărtați liniile care încep
cu "pachet" și "PlayState de clasă publică" și parantezele acestora.

Acum vedem o listă de variabile locale.

? privat var _ship: nava; privat var _aliens: FlxGroup; private var _bullets: FlxGroup; privat var _scoreText: FlxText; privat var _gameOverText: FlxText; privat var _spawnTimer: Număr; privat var _spawnInterval: Number = 2.5;? 

Amintiți-vă mai devreme că variabilele din Lua sunt fie locale, fie globale și că nu au nevoie
declară tipul lor. Modificați variabilele astfel:

? localitate; _aliens local; buletine locale; local _scoreText; local _spawnInterval = 2.5;? 

Acum, deplasați în jos lista de declarații de funcții, începând cu create (). Eliminați toate declarațiile tipului de funcții, cum ar fi "publice"
sau "suprascrie public". Comentează sau elimină toate tipurile de returnare pentru funcții. Aproape toate aceste funcții sunt ": void". Înlocuiți brațele funcției cu "capăt". Creați () ar trebui să arate acum:

? funcția create () -: void FlxG.score = 0; bgColor = 0xFFABCC7D; _ship = navă nouă (); add (_ship); _aliens = FlxGroup () nou; add (_aliens); _bulleturi = FlxGroup () nou; add (_bullets); _scoreText = FlxText nou (10, 8, 200, "0"); _scoreText.setFormat (null, 32, 0xFF597137, "stânga"); add (_scoreText); resetSpawnTimer (); super.create (); Sfârșit? 

Când ajungem la funcții precum update (), trebuie să ne ocupăm și de declarațiile if-then. Doar
înlocuiți brațul de deschidere "" cu "apoi", iar brațul de închidere "" cu "capăt". Orice "&&" ar trebui să fie
fi înlocuit cu "și". "||" ar trebui înlocuit cu "sau".

? actualizarea funcției () -: void FlxU.overlap (_aliens, _bullets, overlapAlienBullet); FlxU.overlap (_aliens, _ship, overlapAlienShip); dacă (FlxG.keys.justPressed ("SPACE") și _ship.dead == false), atunci spawnBullet (_ship.getBulletSpawnPosition ()); dacă (FlxG.keys.ENTER și _ship.dead) apoi FlxG.state = noua PlayState (); sfârșitul _spawnTimer - = FlxG.elapsed; în cazul în care (_spawnTimer < 0) then spawnAlien(); resetSpawnTimer(); end super.update(); end? 

Unele funcții, cum ar fi overlapAlienBullet (), iau argumente. În ActionScript, trebuie să declarăm tipul de argumente pe care le vom trece. Funcția overlapAlienBullet () are o variabilă "alien" (de tip Alien) și o variabilă numită "bullet" (de tip Bullet). Aceste declarații de tip ar trebui eliminate. De asemenea, overlapAlienBullet () are variabile locale. Eliminați și declarațiile de tip de la acestea. Notă: Declarațiile de variabile locale trebuie să conțină cuvântul cheie local înaintea lor.

Inainte de:

? funcția privată overlapAlienBullet (străin: Alien, glonț: Bullet): void var emitter: FlxEmitter = createEmitter (); emitter.at (străin); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); ? 

După:

? funcția overlapAlienBullet (străin, bullet) -: void emitter local = createEmitter (); emitter.at (străin); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); Sfârșit? 

Ultima funcție, createEmitter (), are o instrucțiune de rezolvat. Nu vom folosi această funcție
în jocul final, dar ar trebui să aruncăm o privire la această afirmație:

 pentru (var i: int = 0; i < particles; i++)  var particle:FlxSprite = new FlxSprite(); particle.createGraphic(2, 2, 0xFF597137); particle.exists = false; emitter.add(particle); 

Linia de sus a codului creează o variabilă "i" cu o valoare de 0. Codul din paranteze se repetă apoi
în timp ce "i" este mai mică decât variabila "particule". Fiecare buclă, variabila "i" devine
incrementate cu 1.

 pentru i = 0, particulele-1 fac? Sfârșit

Instrucțiunea Lua de mai sus creează o variabilă "i" cu valoarea 0. Codul din paranteze
se repetă până când "i" este egală cu variabila "particule" minus 1 (la fel ca și verificarea dacă "i"
este mai mică decât "particulele"). Variabila "i" devine, de asemenea, incrementată cu 1 la fiecare buclă.

Acum putem încheia tratarea doar cu o sintaxă. Eliminați toate punct și virgulă. Comentează tot codul ca
cu fișierul principal. Adăugați o singură linie de comentarii înainte de linii individuale de cod.

 --local _ship - local _aliens --local _bullet --local _scoreText --local _spawnInterval = 2.5

Adăugați comentarii multiple în jurul funcțiilor și bucăți de cod.

 --() -: void FlxG.score = 0 bgColor = 0xFFABCC7D _ship = nou navă () adăugați (_ship) _aliens = nou FlxGroup () noul FlxText (10, 8, 200, "0") _scoreText.setFormat (null, 32, 0xFF597137, "stânga") add (_scoreText) resetSpawnTimer

Continuați și salvați acest fișier ca PlayState.lua în dosarul proiectului. Nu o puneți într-un subdirector
cum ar fi codul sursă. Corona are probleme cu module în subdirectoare.

Module și care necesită

Acum suntem gata să începem să pornim logica din spatele acestui joc. Să vorbim mai întâi despre logica fișierelor.
În sursa noastră ActionScript, fișierul Main.as este executat mai întâi. Celelalte fișiere, cum ar fi
PlayState.as, sunt numite pachete. Aceste pachete sunt importate în fișierul principal. În Lua,
fișierul principal.lua este executat mai întâi. Celelalte fișiere sunt cunoscute ca module și sunt necesare în
fișierul principal. În pachetul ActionScript, pachetele au o declarație de pachet. În Lua, modulele trebuie să aibă și o
sau fișierul principal nu le poate vedea. Aceasta înseamnă că trebuie să modificăm fișierul nostru PlayState.lua.
În partea de sus a fișierului sau în orice alt fișier modul, adăugați această linie astfel încât main.lua să funcționeze cu
modul.

 modul (?, pachet.aproape)

Acum mergeți înapoi la fișierul principal.lua pentru a putea încărca modulul nostru. Ar trebui să arate așa:

 --importul org.flixel * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader" funcția principal () -: void - super (640, 480, PlayState, 1) - sfârșit

Vedem că codul original ActionScript a importat toate pachetele în "org / flixel" și în
"De / Pixelare / flixelprimer". Înlocuiți aceste linii pentru a face acest lucru:

 PlayState local = necesită ("PlayState") - [SWF (width = "640", backgroundColor = "# ABCC7D")] void - super (640, 480, PlayState, 1) - sfârșit

Acest cod creează o nouă variabilă (care este locală în fișierul principal) pentru a ține modulul necesar. Noi
poate accesa acum orice cod din fișierul PlayState.lua din variabila "PlayState".

OOP În Lua

Înainte de a continua cu main.lua, trebuie să facem câteva modificări la PlayState.lua. Dacă ne uităm la
originalul PlayState.as, vedem că toate funcționalitățile sunt înfășurate în interiorul unei clase
numit PlayState. Nu putem crea clase cu lua, dar putem organiza codul nostru într-un mod de a face
este orientat pe obiect. Prin ambalarea tuturor funcționalităților cu funcția de constructor, putem realiza
același efect. Păstrați tot codul dvs. comentat, adăugați aceste linii în jurul întregului cod.

 funcția PlayState ()? codul merge aici? Sfârșit

Acum, toate funcțiile vor fi locale pentru funcția PlayState. Aceste funcții devin private
un fel de instanță PlayState care este creată atunci când este apelat PlayState (). Dacă vroiai să-i imiți pe a
clasă, ați putea pune declarația în afara funcției. Vom învăța mai târziu în lecții
cum să creați aici metode de instanță.

Iată un exemplu de modul care demonstrează această funcționalitate:

 (), numărul funcției de clasă getNumberOfInstances () return numberOfInstances end - această funcție imită o funcție de clasă instanță () local instanță =  numberOfInstances = numberOfInstances + 1 instanță localăNumăr = numberOfInstances - această funcție imită o funcție a metodei instanței instanță: getInstanceNumber () instanță de întoarcereNumăr sfârșit - această funcție imită o metodă privată create () retur Instanța instanței - aceasta apelează metoda privată după ce toate funcțiile au fost declarate returnate creați () sfârșitul

Dacă doriți să jucați cu codul de mai sus, aici este un fișier principal.lua care demonstrează utilizarea (presupunând că
modulul este salvat ca test.lua):

 test local.instance () test local.instance () instanță locală2 = test.Instance () instanță locală3 = test.Instance () instanță locală4 = test.Instance () print (test.getNumberOfInstances () (instance2: getInstanceNumber ())

Observați că funcțiile modulului utilizează sintaxa punct, în timp ce toate celelalte funcții Lua (și chiar unele dintre ele
declarațiile lor după cum am văzut) folosesc un colon (:) în locul punctului. Acest lucru poate fi confuz, ca
proprietățile din Lua sunt accesate folosind sintaxa dot. Din această cauză, am lăsat toate apelurile pentru funcții
singur în timp ce porți sintaxa mai devreme. Vom decide dacă să folosim un colon sau un punct pentru fiecare caz
întâlnim.

Acum, că avem toate funcționalitățile în PlayState.lua în interiorul funcției PlayState (), toate
funcțiile imită acum funcțiile private din ActionScript. Care este exact
ceea ce vrem. Adăugați o variabilă locală PlayState în partea de sus a funcției.

 funcția PlayState () locală PlayState = ? Sfârșit

Acum, continuați și dezarhivați funcția create () și mutați-o în partea de jos (chiar înainte
sfârșitul final). Adăugați comentarii de o singură linie la toate liniile din interiorul funcției, astfel încât să putem continua
a se vedea logica, dar nu arunca nici o eroare.

 modul (?, pachet.seeall) funcția PlayState () local PlayState = ? o grămadă de cod comentat? () -: void --FlxG.score = 0 --bgColor = 0xFFABCC7D --_ ship = new Ship () --add (_ship) --_ aliens = new FlxGroup () --add (_aliens) _bullet = nou FlxGroup () --add (_bulleturi) --_ scoreText = nou FlxText (10, 8, 200, "0") --_ scoreText.setFormat (null, 32, 0xFF597137, "stânga") --add (_scoreText ) --resetSpawnTimer () --super.create () sfârșitul final

Mutarea la API-ul Corona

Jocul original ActionScript a fost construit folosind biblioteca flixel discutată la începutul acestei versiuni
lecţie. Din păcate, nu există nici un port Lua de flixel din această scriere. Deci, vom fi
implementând toate logica flixel cu API-ul Corona SDK.

Primele lucruri de reținut se află înapoi în fișierul principal.lua. În funcția flixel, funcția Main () este automat
este sunat când programul este rulat. În Corona, fișierul principal.lua este rulat de sus în jos.
Deci, pentru a obține același efect ca în sursă, adăugați Main () la sfârșitul main.lua.

 PlayState local = necesită ("PlayState") - [SWF (width = "640", backgroundColor = "# ABCC7D" - super (640, 480, PlayState, 1) sfârșitul Main ()

De asemenea, în majoritatea jocurilor flixel, în timp ce este programat, este afișat un preloader cu sigla flixel
se incarca. Nu avem nevoie de aplicația noastră, deci nu vom face un fișier preloader.lua. Liniile adăugând
preloaderul și setarea dimensiunii / fundalului programului pot fi eliminate (nu putem schimba aplicația
mărimea).

 PlayState locală = necesită ("PlayState") funcția Main () -: void - super (640, 480, PlayState, 1)

În timp ce suntem aici, creați un PlayState nou în Main ().

 playState local =) necesită ("PlayState") funcția Main () -: void PlayState.PlayState () end Main ()

Revenind la PlayState.lua, observăm că create () nu este apelat. În flixel, creați () și
update () sunt gestionate automat. Va trebui să ne ocupăm de noi înșine în Corona. Adauga o
apel pentru a crea () înainte de ultimul sfârșit.

 modul (?, pachet.seeall) funcția PlayState () local PlayState = ? o grămadă de cod comentat? funcția create () -: void? a comentat crea () logica? end end create ()

Înainte de a merge mai departe, să aruncăm o privire la ceea ce avem până acum. Acum avem un fișier principal.lua care
necesită PlayState.lua și rulează PlayState (). PlayState () face o nouă instanță PlayState și apoi
apelurile create (). Creează () este locul în care rulează tot codul de configurare pentru joc. Acum avem un cadru
să ne construim logica în jurul nostru.

Obiecte de afișare

Acum trebuie să începem să adăugăm caracteristici funcției create () pentru a ne configura jocul. Să începem
crearea fundalului jocului în culoarea verde. În codul nostru, avem această linie comentată în cadrul nostru
create ().

 --bgColor = 0xFFABCC7D;

Acest lucru ne spune valoarea hexazecimală pentru culoarea verde originală. O modalitate ușoară de a face un fundal
în Corona este de a face un dreptunghi colorat care are aceeași dimensiune ca ecranul. Acest lucru se poate face folosind
Corona are obiecte de afișare. Similar cu ActionScript, Corona ne oferă un API pentru afișarea obiectelor
Monitorul. Putem folosi modulul de afișare pentru multe sarcini diferite. Poate fi folosit pentru a crea
obiecte noi sau grupuri de obiecte sau pentru găsirea lățimii / înălțimii ecranului. Să creăm un nou
dreptunghi și salvați-o ca proprietate a variabilei PlayState.

 modul (?, pachet.seeall) funcția PlayState () local PlayState = ? o grămadă de cod comentat? create create () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight)? a comentat crea () logica? end end create ()

Aici am creat un nou dreptunghi de la (0,0) la (lățimea ecranului, înălțimea ecranului) și stocat
în variabila _background. Am pus sublinierea acolo pentru a imita codul original. Toate
din variabilele private din versiunea ActionScript a jocului începe cu un subliniere.
_background este privat pentru fiecare instanță PlayState, așa că am formatat-o ​​ca și celelalte variabile.

Observați sintaxa punctului. Dacă vă reamintiți din mai devreme, acest lucru înseamnă că _background este acum proprietatea lui
PlayState. Deoarece am creat variabila PlayState în afara funcției create (), aceasta este disponibilă
acum la toate funcțiile. Dacă am creat PlayState în interiorul create () ca acesta:

 modul PlayState () function create () - PlayState este acum local pentru a crea () local PlayState =  - PlayState poate fi folosit inca in crearea, dar nu este disponibil in afara. PlayState._aNumber = 10 funcția end otherFunction () - Aceasta va arunca o eroare. otherFunction nu știe ce este PlayState. print (PlayState._aNumber) sfârșitul crea () altFunction () sfârșit

Nu am fi putut să o folosim în altăFuncție (). De când am creat PlayState la început
din PlayState (), toate funcțiile îl pot utiliza.

 modul PlayState () PlayState () - PlayState este acum local pentru PlayState () local PlayState =  create create () - PlayState (și proprietățile sale) pot fi folosite în crearea și oriunde altundeva. PlayState._aNumber = 10 funcția end otherFunction () PlayState._aNumber = PlayState._aNumber + 4 - Aceasta va imprima 14 print (PlayState._aNumber) end create () otherFunction () sfârșit

Dacă executați codul cu noul dreptunghi, veți vedea un fundal alb. Trebuie să o schimbăm
umple culoarea verde. Pentru a face acest lucru avem nevoie pentru a converti hex codul (ABCC7D) la RGB, care este ceea ce
Corona folosește pentru a umple obiectele de afișare. Puteți introduce codul în oricare dintre site-urile hexagonale la RGB.
Rezultatul va fi (171, 204, 125). Acum folosiți metoda instanței setFillColor (observați colonul)
PlayState._background.

 modul (?, pachet.seeall) funcția PlayState () local PlayState = ? o grămadă de cod comentat? () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? a comentat crea () logica? end end create ()

Acum avem începutul unui joc. Să facem câteva schimbări înainte de a ne încheia ziua.
Să adăugăm o variabilă la fiecare instanță PlayState pentru a afla dacă jocul rulează sau nu.

 modul (?, pachet.seeall) funcția PlayState () local PlayState = ? o grămadă de cod comentat? () -: void PlayState._inGame = true PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? a comentat crea () logica? end end create ()

Acest lucru va deveni foarte util mai târziu. De asemenea, să scăpăm de bara de stare din partea de sus a iPhone-ului.
Vrem doar acest lucru făcut o dată când aplicația este lansată, deci adăugați-o la main.lua.

 PlayState.PlayState () final Main () -: void display.setStatusBar (display.HiddenStatusBar) PlayState.PlayState ()

Un alt pas important când faci o aplicație Corona este să adaugi un fișier de configurare care să-i spună lui Corona cum
pentru a scala aplicația dvs. pe alte platforme. În acest tutorial, suntem doar preocupați de iPhone
dimensiunea ecranului (deși aplicația se va difuza și pe Android). Creați un fișier numit config.lua și completați-l
cu asta.

 aplicație = content = width = 320, height = 480, scale = "letterbox",

Acum, aplicația noastră va rula și pe ecranele retinei. Notă: acest fișier va funcționa cu orice aplicație Corona.

Concluzie

Acum avem un cadru de lucru pentru a începe să construim. Aplicația noastră nu arată prea mult, dar noi
au acoperit o mulțime de pași importanți în portarea de la o limbă la alta. În urmatoarele
lecție din această serie vom începe să facem un joc pe care să îl putem juca.

Cod