Porterer ActionScript-spill til iOS med Corona SDK Del 1

Denne opplæringen vil ta en titt på å overføre et Flash / Flex-spill til Corona SDK. Spesielt vil vi overføre fra ActionScript til Lua, med sluttmål å spille tidligere Flash-bare spill på iPhone. I tillegg til å demonstrere språk- og API-forskjeller, vil denne opplæringsserien også ta hensyn til maskinvarebegrensninger som skjermstørrelse og mangel på fysiske knapper på iPhone.

Hva er Corona?

Før vi går inn i selve kodingen, vil jeg gjerne gi en rask oversikt over programvaren vi vil
bruker. Corona SDK er et produkt av Ansca Mobile for å skape spill for iPhone, iPod Touch, iPad og Android-enheter. På tidspunktet for denne skrivingen finnes det en gratis, ubegrenset prøveversjon av settet som er tilgjengelig her. Den inneholder all funksjonaliteten til den betalte versjonen, unntatt for publisering til respektive app-butikker på iPhone- og Android-enhetene. Denne opplæringen vil gi en flott introduksjon til kraften og effektiviteten til Corona.

Spillet

I denne opplæringen vil vi portere et flixeldrevet spill av Andreas Zecher. Dette spillet ble opprettet med Andreas 'opplæring i open-source flixel-biblioteket og ActionScript-språket. Den opprinnelige koden er tilgjengelig her (Andreas var snill nok til å frigjøre den som åpen kildekode). Hvis du er interessert i å lage flash spill, sørg for å sjekke ut den opprinnelige opplæringen. Det er noen veldig nyttige opplysninger der!

Lua Language

Ansca Mobiles programvareutviklingssett bruker lua programmeringsspråket og utvider deres API. Lua er et veldig rent språk. Mens catering mot nybegynnere, har jeg funnet det å være veldig kraftig med veldig lite kode. Lua er ikke en
objektorientert språk, men det kan gjøres for å følge den objektorienterte modellen med litt finjustering.

Med det sagt, la oss ta en titt på vår første hindring: Lua er syntaktisk forskjellig fra ActionScript.

Variabler i Lua håndteres annerledes enn i ActionScript. I ActionScript er variabler statisk innstilt. Dette betyr at de erklærer deres type og kun butikkverdier av den typen, med mindre de er eksplisitt konvertert.

? privat varelse: skip; // Variabler erklære deres type. Denne variabelen er av typen "Ship" private var _aliens: FlxGroup; private var _bullets: FlxGroup; privat var _scoreText: FlxText; private var _gameOverText: FlxText; privat var _spawnTimer: Nummer; privat var _spawnInterval: Number = 2.5;? 

I lua er variabler skrevet dynamisk. En Lua-variabel kan inneholde hvilken som helst type når som helst. En annen
ting å legge merke til er at variabler i Lua er enten lokale eller globale. En variabel er lokal
(kun tilgjengelig) til .lua-filen eller dens funksjon, etc. hvis den er prefiks med "lokal" på
variabel erklæring. Ellers regnes det som "globalt" i omfang. Den beste praksisen i Lua er å alltid bruke
lokale variabler. Denne opplæringen vil overholde den praksisen.

? lokal _ship - Variabler erklære ikke deres type. Denne variabelen kan være et "Ship" eller det kan være - en streng. Senere kan det brukes til å lagre et heltall eller en matrise. lokale _aliens lokale _bullets lokale _scoreText lokale _gameOverText lokale _spawnTimer = null - Denne variabelen har en oppgave og en deklarasjon på samme linje. lokal _spawnInterval = 2.5 - gjør også denne? 

Som du sikkert har lagt merke til, håndteres kommentarer annerledes i Lua enn i ActionScript.

 // Dette er en kommentar i ActionScript / * Dette er en multiline kommentar i ActionScript * /
 -- Dette er en kommentar i lua - [[Dette er en multiline kommentar i lua -]]

En viktig ting å vite om kommentarene i Lua er at alt etter "-" er en kommentar bortsett fra
for "- [[". Dette gir et pent trick. Hvis du legger til et ekstra dash i begynnelsen av multilinen
kommentar "--- [[", det kommenterer den multiline delen ut. Dette skjer fordi alt etter det første
to bindestreker er en kommentar. Se nå på sluttkommentaren "-]]". Det er allerede en kommentar fordi den også
er etter to bindestreker. Dette blir effektivt en bryter for å slå av og på biter av kode!

 --[[Dette er en kommentar -]] --- [[Dette er kode og vil bli utført som sådan. I dette tilfellet vil en feil bli kastet. -]]

Looper, braketter og operatører er definert av ord i Lua:

 // ActionScript hvis (_spawnTimer < 0)  spawnAlien(); resetSpawnTimer(); 
 -- Lua hvis (_spawnTimer < 0) then spawnAlien() resetSpawnTimer() end

Lua bruker "if-then", "else", "elseif-then", "end", "og", "eller" osv. Legg merke til at Lua ikke bruker
semikolon for å avslutte hver linje. Uten alle brakettene og semikolonene ser Lua kode mye mer ut
som engelsk språk enn andre programmeringsspråk.

En ting å merke seg før vi kommer i gang, er Lua ikke har støtte for oppdragsgenveier.

 // ActionScript _spawnInterval * = 0.95; // Dette er tillatt i ActionScript
 -- lua _spawnInterval * = 0.95 - Dette vil resultere i en feil i lua _spawnInterval = _spawnInterval * 0.95 - Dette er riktig Lua-kode

Begynnende porting

Nå som vi forstår noen av de grunnleggende forskjellene mellom ActionScript og Lua, kan vi begynne
prosess for å overføre spillet mellom dem. Kildekoden for denne opplæringen og vedlagt dette innlegget inkluderer
original kildekoden og den ferdige koden for dagens prosjekt.

syntax

For å gjøre porting lettere nedover veien begynner vi å konvertere all syntaks i vår kilde
filer, uten å bekymre oss om selve programlogikken. På den måten, når vi begynner å jobbe med logikken,
koden vil allerede bli formatert riktig. La oss starte prosessen med Main.as-filen, som ser ut
noe sånt som dette:

 pakke import org.flixel. *; importer de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Ramme (factoryClass = "Preloader")] offentlig klasse Hoved utvider FlxGame offentlig funksjon Main (): void super (640, 480, PlayState, 1); 

Det er ikke mye å gjøre her. Vi trenger ikke "pakke" deklarasjonen, så vi kan fjerne de øverste og nederste linjene i koden.

 importer org.flixel. *; importer de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Ramme (factoryClass = "Preloader")] offentlig klasse Hoved utvider FlxGame offentlig funksjon Main (): void super (640, 480, PlayState, 1); 

Siden Lua ikke har klasser, kan vi fjerne linjen "offentlig klasse Main utvider FlxGame", og det er
tilsvarende beslag.

 importer org.flixel. *; importer de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Ramme (factoryClass = "Preloader")] offentlig funksjon Main (): void super (640, 480, PlayState, 1); 

Nå kan vi jobbe med Main () -funksjonen. Først og fremst må du merke den "offentlige" erklæringen av metoden.
Lua har ikke separate funksjonstyper, så vi kan fjerne det. Husk at i Lua, fungerer
ikke erklære sin returtype. Det finnes et nøkkelord: "tomrom" på slutten av funkjonserklæringen.
Dette betyr at denne funksjonen ikke vil returnere en verdi, noe som ikke er nødvendig i Lua. Så vi kan slippe
den. Du vil kanskje bare kommentere det for referanse senere. Til slutt fjern brakettene rundt
Hoved(). I lua bruker vi ord. Legg til "slutt" på slutten av funksjonen.

 importer org.flixel. *; importer de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Ramme (factoryClass = "Preloader")] funksjon Main () -: void super (640, 480, PlayState, 1); slutt

For å pakke opp ting, fjern alle semikolonene ";" og kommentere alle kodelinjene. Dette
måte, vi kan begynne å overføre logikk uten å få feil.

 --importere org.flixel. * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Ramme (factoryClass = "Preloader")] - funksjon Main () -: void - super (640, 480, PlayState, 1) --end

På dette punktet vil du opprette en prosjektmappe for å holde filene dine. Jeg ringte min
"Alien_shooter". Dette er mappen du vil passere til Corona når du er klar til å kjøre din
kode. På innsiden av mappen ser Corona etter filen "main.lua". Corona er saksensitiv, så du
må ikke kapitalisere det første bokstaven som i "Main.as". Lagre koden ovenfor som main.lua.

La oss gå videre til neste fil. I dag skal vi bare jobbe med to av kildefilene. Den andre
filen er lokalisert på "de / pixelate / flixelprimer / PlayState.as" i vedlagte kildekoden. Denne filen er hvor
Alt spillingen håndteres. Som sådan er det den lengste filen. Vi vil endre syntaksen i små biter.
På samme måte som hovedfilen, har denne koden en pakke- og klassedeklarasjon. Fjern linjene som starter
med "pakke" og "Public Class PlayState" og deres braketter.

Vi ser nå en liste over lokale variabler.

? privat varelse: skip; private var _aliens: FlxGroup; private var _bullets: FlxGroup; privat var _scoreText: FlxText; private var _gameOverText: FlxText; privat var _spawnTimer: Nummer; privat var _spawnInterval: Number = 2.5;? 

Husk fra tidligere at variabler i Lua er enten lokale eller globale, og at de ikke trenger det
erklære deres type. Endre variablene for å se slik ut:

? lokale _skip; lokale _aliens; lokale _bullets; lokal _scoreText; lokal _spawnInterval = 2,5;? 

Nå flytter du ned listen over funksjonsdeklarasjoner, begynner med create (). Fjern alle funksjonstypedeklarasjoner, for eksempel "offentlig"
eller "overstyr offentlig". Kommentere eller fjerne alle returtyper for funksjonene. Nesten alle disse funksjonene er ": ugyldige". Bytt funksjonens braketter med "slutt". Opprett () skal nå se slik ut:

? funksjon opprett () -: void FlxG.score = 0; bgColor = 0xFFABCC7D; _ship = nytt skip (); legg (_ship); _aliens = ny FlxGroup (); legg (_aliens); _bullets = ny FlxGroup (); legg (_bullets); _scoreText = ny FlxText (10, 8, 200, "0"); _scoreText.setFormat (null, 32, 0xFF597137, "venstre"); legg (_scoreText); resetSpawnTimer (); super.create (); slutt? 

Når vi kommer til funksjoner som oppdatering (), må vi også håndtere if-then uttalelser. Bare
Skift ut åpningsbraketten "" med "da" og sluttbraketten "" med "ende". Enhver "&&" skal
bli erstattet med "og". "||" bør erstattes med "eller".

? funksjon oppdatering () -: void FlxU.overlap (_aliens, _bullets, overlapAlienBullet); FlxU.overlap (_aliens, _ship, overlapAlienShip); hvis (FlxG.keys.justPressed ("SPACE") og _ship.dead == false) så spawnBullet (_ship.getBulletSpawnPosition ()); avslutte hvis (FlxG.keys.ENTER og _ship.dead) deretter FlxG.state = new PlayState (); slutten _spawnTimer - = FlxG.elapsed; if (_spawnTimer < 0) then spawnAlien(); resetSpawnTimer(); end super.update(); end? 

Noen funksjoner, som overlapAlienBullet (), tar argumenter. I ActionScript må vi erklære hvilken type argumenter vi skal passere. Funksjonen overlapAlienBullet () tar en variabel "alien" (av typen Alien), og en variabel kalt "bullet" (av typen Bullet). Disse typer erklæringer bør fjernes. OverlapAlienBullet () har også lokale variabler. Fjern også deklarasjonene fra disse. Merk: Lokale variabeldeklarasjoner må ha søkeordet lokale før dem.

Før:

? privat funksjon overlapAlienBullet (fremmed: Alien, bullet: Bullet): void varemitter: FlxEmitter = createEmitter (); emitter.at (fremmed); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); ? 

Etter:

? funksjon overlapAlienBullet (fremmed, kule) -: void local emitter = createEmitter (); emitter.at (fremmed); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); slutt? 

Den aller siste funksjonen, createEmitter (), har en for-do-setning. Vi bruker ikke denne funksjonen
i siste kamp, ​​men vi bør se på denne setningen:

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

Kodens øverste linje lager en variabel "i" med en verdi på 0. Koden i parentesene gjentas deretter
seg selv mens "jeg" er mindre enn variabelen "partikler". Hver løkke, variabelen "jeg" får
økes med 1.

 for i = 0, gjør partikler-1? slutt

Lua-setningen ovenfor lager en variabel "jeg" med en verdi på 0. Koden i parentesene
gjentar seg selv til "jeg" er lik variabelen "partikler" minus 1 (det samme som å sjekke om "jeg"
er mindre enn "partikler"). Variablen "i" blir også økt med 1 hver løkke.

Vi kan nå pakke opp som omhandler bare syntaks. Fjern alle semikolonene. Kommentere all koden som
med hovedfilen. Legg til en linje kommentarer før individuelle linjer med kode.

 --lokal _ship - lokal _aliens - lokal _bullets - lokal _scoreText - lokal _spawnInterval = 2,5

Legg til multiline kommentarer rundt funksjoner og biter av kode.

 --[] fungere () -: void FlxG.score = 0 bgColor = 0xFFABCC7D _ship = nytt Ship () add (_ship) _aliens = nytt FlxGroup () add (_aliens) _bullets = nytt FlxGroup () add (_bullets) _scoreText = ny FlxText (10, 8, 200, "0") _scoreText.setFormat (null, 32, 0xFF597137, "venstre") legg til (_scoreText) resetSpawnTimer () super.create () end -]]

Gå videre og lagre denne filen som PlayState.lua i prosjektmappen din. Ikke legg det i en undermappe
som kildekoden. Corona har problemer med moduler i underkataloger.

Moduler og kreves

Nå er vi klare til å begynne å legge logikken bak dette spillet. La oss snakke om fillogikken først.
I vår ActionScript-kilde utføres Main.as-filen først. De andre filene, for eksempel
PlayState.as, kalles pakker. Disse pakkene importeres til hovedfilen. I Lua, den
main.lua-filen blir utført først. De andre filene er kalt moduler og kreves i
hovedfilen. I ActionScript har pakker en pakkeerklæring. I Lua må modulene også ha a
erklæring, eller hovedfilen kan ikke se dem. Dette betyr at vi må endre vår PlayState.lua-fil.
Øverst på filen, eller en annen modulfil, legg til denne linjen slik at main.lua kan fungere med
modul.

 modul (?, package.seeall)

Gå nå tilbake til main.lua-filen slik at vi kan laste inn modulen vår. Det skal se slik ut:

 --importere org.flixel. * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Ramme (factoryClass = "Preloader")] - funksjon Main () -: void - super (640, 480, PlayState, 1) --end

Vi ser at den originale ActionScript-koden importerte alle pakkene i "org / flixel" og i
"De / Pixelate / flixelprimer". Erstatt disse linjene for å gjøre dette:

 lokale PlayState = krever ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Ramme (factoryClass = "Preloader")] - funksjon Hoved void - super (640, 480, PlayState, 1) --end

Denne koden oppretter en ny variabel (som er lokal for hovedfilen) for å holde den nødvendige modulen. Vi
kan nå få tilgang til en hvilken som helst kode fra filen PlayState.lua fra variabelen "PlayState".

OOP I Lua

Før vi fortsetter med main.lua, må vi gjøre noen endringer i PlayState.lua. Hvis vi ser på
original PlayState.as-fil, ser vi at all funksjonalitet er pakket inn i en klasse
kalt PlayState. Vi kan ikke lage klasser med lua, men vi kan organisere vår kode på en måte å lage
det objektorientert. Ved å pakke inn all funksjonalitet med en konstruktørfunksjon, kan vi oppnå det
den samme effekten. Hvis du holder hele koden din kommentert, legger du til disse linjene rundt hele koden.

 funksjon PlayState ()? kode går her? slutt

Nå vil alle funksjonene være lokale for funksjonen PlayState. Disse funksjonene blir private til
en slags PlayState-forekomst som blir opprettet når PlayState () kalles. Hvis du ønsket å etterligne en
klassemetode, kan du sette erklæringen utenfor funksjonen. Vi lærer i senere leksjoner
hvordan du oppretter eksempelmetoder her også.

Her er en eksempelmodul som demonstrerer denne funksjonaliteten:

 modul (?, package.seeall) lokalnummerOfInstances = 0 - denne funksjonen etterligner en klassemetodefunksjon getNumberOfInstances () returnummerOfInstances end - denne funksjonen etterligner en klassefunksjon Instans () lokal instans =  numberOfInstances = numberOfInstances + 1 lokal forekomstnummer = numberOfInstances - denne funksjonen etterligner en instansmetodefunksjon Instans: getInstanceNumber () return instanceNumber end - denne funksjonen etterligner en privat metodefunksjon opprette () retur Instansendring - dette kaller den private metoden etter at alle funksjonene er deklarert tilbake opprett () slutt

Hvis du vil spille med koden ovenfor, her er en main.lua-fil som viser bruk (forutsatt at
modulen lagres som test.lua):

 lokal test = krever ("test") lokal instance1 = test.Instance () local instance2 = test.Instance () local instance3 = test.Instance () local instance4 = test.Instance () print (test.getNumberOfInstances ()) print (instance2: getInstanceNumber ())

Legg merke til at modulens funksjoner bruker punktsyntax, mens alle andre Lua fungerer (og til og med noen av
deres erklæringer som vi så) bruker en kolon (:) i stedet for prikken. Dette kan være forvirrende, som
Egenskaper i Lua åpnes ved hjelp av punktsyntaks. På grunn av dette forlot vi alle funksjonsanropene
alene mens du portretterer syntaksen tidligere. Vi vil bestemme om du skal bruke et kolon eller en prikk for hvert tilfelle
vi kommer over.

Nå som vi har all funksjonalitet i PlayState.lua inne i PlayState () -funksjonen, er alle
funksjonene etterlikner nå private funksjoner i ActionScript. Som er akkurat
hva vi vil ha. Legg til en lokal PlayState-variabel øverst på funksjonen.

 funksjon PlayState () lokale PlayState = ? slutt

Nå, fortsett og uncomment create () -funksjonen og flytte den til bunnen (like før
den endelige enden). Legg til en linje kommentarer til alle linjene inne i funksjonen, så vi kan fortsatt
se logikken, men det kaster ingen feil.

 modul (?, package.seeall) funksjon PlayState () lokale PlayState = ? en hel masse kommentert kode? funksjon opprette () -: void --FlxG.score = 0 --bgColor = 0xFFABCC7D --_ skip = nytt skip () --add (_ship) --_ aliens = new FlxGroup () --add (_aliens) - _bullets = new FlxGroup () --add (_bullets) --_ scoreText = ny FlxText (10, 8, 200, "0") --_ scoreText.setFormat (null, 32, 0xFF597137, "venstre") --add (_scoreText ) --resetSpawnTimer () --super.create () slutten

Flytter til Corona API

Det opprinnelige ActionScript-spillet ble bygget ved hjelp av flixel-biblioteket som ble diskutert i begynnelsen av dette
lekse. Dessverre er det ingen Lua-port av flixel som av denne skrivingen. Så, vi vil være
implementere alle flixel logikken med Corona SDK API.

De første tingene å merke seg, er tilbake i main.lua-filen. I flixel fungerer hovedfunksjonen () automatisk
blir kalt når programmet kjøres. I Corona kjøres main.lua-filen fra toppen til bunnen.
For å oppnå samme effekt som i kilden, legg til Main () til slutten av main.lua.

 Lokal PlayState = krever ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Ramme (factoryClass = "Preloader")] funksjon Main () -: void - - super (640, 480, PlayState, 1) slutten Main ()

Også i de fleste flixel-spill vises en forhåndslaster med flixel-logoen mens programmet er
lasting. Vi trenger ikke det for vår app, så vi vil ikke lage en preloader.lua-fil. Linjene legger til
Preloader og innstilling av programstørrelse / bakgrunn kan fjernes (vi kan ikke endre appen
størrelse).

 lokal PlayState = krever ("PlayState") funksjon Main () -: void - super (640, 480, PlayState, 1) avslutning Main ()

Mens vi er her, opprett en ny PlayState i Main ().

 lokal PlayState = krever ("PlayState") funksjon Main () -: void PlayState.PlayState () slutten Main ()

Tilbake til PlayState.lua, legger vi merke til at create () ikke blir kalt. I flixel, opprett () og
oppdatering () håndteres automatisk. Vi må ta vare på disse oss selv i Corona. Legg til en
ring for å opprette () før den siste enden.

 modul (?, package.seeall) funksjon PlayState () lokale PlayState = ? en hel masse kommentert kode? funksjon opprette () -: ugyldig? kommenterte lage () logikk? end create () end

Før vi går videre, la oss ta en titt på hva vi har så langt. Vi har nå en main.lua-fil som
krever PlayState.lua og kjører PlayState (). PlayState () lager en ny PlayState-forekomst og deretter
samtaler opprette (). Opprett () er der alt oppsettkoden for spillet går. Vi har nå et rammeverk
å bygge vår logikk rundt.

Vis objekter

Vi må nå begynne å legge til funksjoner i vår create () -funksjon for å sette opp spillet vårt. La oss begynne med
skaper spillets grønnfarvede bakgrunn. I vår kode har vi denne linjen kommentert i vår
create () funksjon.

 --bgColor = 0xFFABCC7D;

Dette forteller oss den heksadesimale verdien for den opprinnelige grønnfargen. En enkel måte å lage en bakgrunn på
i Corona er å lage et farget rektangel som er like stor som skjermen. Dette kan gjøres ved hjelp av
Coronas visningsobjekter. I likhet med ActionScript gir Corona oss en API for å vise objekter til
skjermen. Vi kan bruke skjermmodulen til mange forskjellige oppgaver. Det kan brukes til å lage
nye objekter eller grupper av objekter, eller for å finne skjermens bredde / høyde. La oss lage en ny
rektangel og lagre det som en egenskap av vår PlayState-variabel.

 modul (?, package.seeall) funksjon PlayState () lokale PlayState = ? en hel masse kommentert kode? funksjon opprett () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight)? kommenterte lage () logikk? end create () end

Her opprettet vi et nytt rektangel fra (0,0) til (skjermens bredde, skjermens høyde) og lagret
det i variabelen _background. Jeg legger understreken der for å etterligne den opprinnelige koden. Alle
av de private variablene i ActionScript-versjonen av spillet starter med en understreking.
_background er privat for hver PlayState-forekomst, så jeg formaterte den som de andre variablene.

Legg merke til punktsyntaxen. Hvis du husker fra tidligere, betyr dette at _background er nå en eiendom av
PlayState. Siden vi opprettet den variable PlayState utenfor funksjonen create (), er den tilgjengelig
nå til alle funksjonene. Hvis vi hadde opprettet PlayState inne i create () som dette:

 modul (?, package.seeall) funksjon PlayState () funksjon opprett () - PlayState er nå lokal for å opprette () lokale PlayState =  - PlayState kan fortsatt brukes i opprett, men det er ikke tilgjengelig utenfor. PlayState._aNumber = 10 sluttfunksjon otherFunction () - Dette vil kaste en feil. otherFunction vet ikke hva PlayState er. skrive ut (PlayState._aNumber) end create () otherFunction () ende

Vi ville ikke ha kunnet bruke den i andreFunksjon (). Siden vi opprettet PlayState i begynnelsen
av PlayState (), kan alle funksjonene bruke den.

 modul (?, package.seeall) funksjon PlayState () - PlayState er nå lokal til PlayState () lokale PlayState =  funksjon create () - PlayState (og dets egenskaper) kan brukes i opprett og andre steder. PlayState._aNumber = 10 sluttfunksjon otherFunction () PlayState._aNumber = PlayState._aNumber + 4 - Dette vil skrive ut 14 utskrift (PlayState._aNumber) end create () otherFunction () end

Hvis du kjører koden med det nye rektangelet, ser du en hvit bakgrunn. Vi må endre dens
fyll farge til grønt. For å gjøre dette må vi konvertere hex-koden (ABCC7D) til RGB, som er hva
Corona bruker for å fylle skjermobjekter. Du kan lime inn koden i noen av sekskene til RGB-nettsteder.
Resultatet vil bli (171, 204, 125). Bruk nå setFillColor-forekomstmetoden (merk kolon) på
PlayState._background.

 modul (?, package.seeall) funksjon PlayState () lokale PlayState = ? en hel masse kommentert kode? funksjon opprett () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? kommenterte lage () logikk? end create () end

Nå har vi begynnelsen på et spill. La oss gjøre noen flere endringer før vi pakker opp for dagen.
La oss legge til en variabel for hver forekomst av PlayState for å fortelle om spillet kjører eller ikke.

 modul (?, package.seeall) funksjon PlayState () lokale PlayState = ? en hel masse kommentert kode? funksjon opprette () -: void PlayState._inGame = sann PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? kommenterte lage () logikk? end create () end

Det vil bli veldig nyttig senere. La oss også bli kvitt statuslinjen øverst på iPhone.
Vi vil bare ha dette gjort en gang når appen er lansert, så legg dette til main.lua.

 lokal PlayState = krever ("PlayState") -funksjon Hoved () -: void display.setStatusBar (display.HiddenStatusBar) PlayState.PlayState () slutten Main ()

Et annet viktig steg når du lager en Corona-app, er å legge til en config-fil som forteller Corona hvordan
å skalere appen din på andre plattformer. I denne opplæringen er vi bare opptatt av iPhone
skjermstørrelse (selv om appen vil kjøre på Android også). Opprett en fil som heter config.lua og fyll den
med dette.

 søknad = content = width = 320, height = 480, scale = "letterbox",

Nå vil vår app kjøre på netthinnen også. Merk: Denne filen vil fungere med alle Corona-apper.

Konklusjon

Vi har nå et arbeidsramme for å begynne å bygge videre på. Vår app ser ikke ut som mye ennå, men vi
har dekket mange viktige trinn i porting fra ett språk til et annet. I neste
leksjon i denne serien vil vi begynne å lage et spillbart spill.