Portar ActionScript-spel till iOS med Corona SDK Del 1

Denna handledning tar en titt på att överföra ett Flash / Flex-spel till Corona SDK. Specifikt kommer vi att överföra från ActionScript till Lua, med slutmålet att spela tidigare Flash-only-spel på iPhone. Förutom att visa språk- och API-skillnader, kommer denna handledningsserie också att ta hänsyn till hårdvarubegränsningar som skärmstorlek och brist på fysiska knappar på iPhone.

Vad är Corona?

Innan vi går in i själva kodningen vill jag ge en snabb överblick över den programvara vi ska
använda. Corona SDK är en produkt av Ansca Mobile för skapande av spel för iPhone, iPod Touch, iPad och Android-enheter. Vid tidpunkten för detta skrivande finns en fri obegränsad provversion av satsen tillgänglig här. Den innehåller all funktionalitet i den betalda versionen, förutom att publicera till respektive appbutiker av iPhone och Android-enheter. Denna handledning kommer att göra en bra introduktion till Corona effekt och effektivitet.

Spelet

I denna handledning kommer vi att portera ett flixeldrivet spel av Andreas Zecher. Detta spel skapades med Andreas 'handledning på flixelbiblioteket med öppen källkod och ActionScript-språket. Den ursprungliga koden är tillgänglig här (Andreas var vänlig nog att släppa den som öppen källa). Om du är intresserad av att göra flashspel, var god och kolla in den ursprungliga handledningen. Det finns några riktigt bra information där!

Lua Language

Ansca Mobiles mjukvaruutvecklingspaket använder lua-programmeringsspråket och utökar deras API. Lua är ett mycket rent språk. Medan catering mot nybörjare har jag funnit att det är väldigt kraftfullt med väldigt liten kod. Lua är inte en
objektorienterat språk, men det kan göras att följa objektorienterad modell med finjustering.

Med det sagt, låt oss ta en titt på vår första hinder: Lua är synaktiskt annorlunda än ActionScript.

Variabler i Lua hanteras annorlunda än i ActionScript. I ActionScript är variablerna statiskt typade. Detta innebär att de deklarerar deras typ och endast butiksvärden av den typen om de inte uttryckligen konverteras.

? privat varelse: fartyg; // Variabler förklarar deras typ. Denna variabel är av typen "Ship" private var _aliens: FlxGroup; privata var _bullets: FlxGroup; privat var _scoreText: FlxText; privat var _gameOverText: FlxText; privat var _spawnTimer: Number; privat var _spawnInterval: Number = 2.5;? 

I lua skrivs variabler dynamiskt. En Lua-variabel kan innehålla vilken som helst typ när som helst. Annan
sak att märka är att variabler i lua är antingen lokala eller globala. En variabel är lokal
(endast tillgänglig) till .lua-filen eller dess funktion, etc. om den är prefixad med "local" på
variabelns deklaration. Annars anses den vara "global" inom räckvidd. Den bästa praxis i Lua är att alltid använda
lokala variabler. Denna handledning kommer att följa den praxis.

? Lokala _ship - Variabler förklarar inte deras typ. Denna variabel kan vara ett "Ship" eller det kan vara - en sträng. Senare kan det användas för att lagra ett heltal eller en matris. local _aliens local _bullets local _scoreText local _gameOverText local _spawnTimer = nil - Denna variabel har en uppgift och en deklaration på samma rad. lokal _spawnInterval = 2,5 - gör det här också? 

Som du säkert har lagt märke till, hanteras kommentarer annorlunda i Lua än i ActionScript.

 // Det här är en kommentar i ActionScript / * Detta är en multilinig kommentar i ActionScript * /
 -- Detta är en kommentar i lua - [[Detta är en multilinig kommentar i lua -]]

En viktig sak att veta om kommentarerna i Lua är att allt efter "-" är en kommentar förutom
för "--[[". Detta möjliggör ett snyggt trick. Om du lägger till en extra streck i början av multilinjen
kommentar "--- [[", det kommenterar den multiline delen ut. Detta händer för allt efter det första
två streck är en kommentar. Kolla nu på slutkommentaren "-]]". Det är redan en kommentar eftersom det också
är efter två bindestreck. Detta blir effektivt en växel för att stänga av och på bitar av kod!

 --[[Detta är en kommentar -]] --- [[Detta är kod och kommer att utföras som sådant. I det här fallet skulle ett fel kastas. -]]

Slingor, parenteser och operatörer definieras av ord i Lua:

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

Lua använder "if-then", "else", "elseif-then", "end", "and", "eller" osv. Observera också att Lua inte använder
semikolon för att avsluta varje rad. Utan alla parenteser och semikolon ser Lua-koden mycket mer ut
som engelska än andra programmeringsspråk.

En sak att notera innan vi börjar är att Lua inte har stöd för uppdragsgenvägar.

 // ActionScript _spawnInterval * = 0.95; // Det här är tillåtet i ActionScript
 -- lua _spawnInterval * = 0.95 - Detta kommer att resultera i ett fel i lua _spawnInterval = _spawnInterval * 0.95 - Detta är korrekt Lua-kod

Börjar Porting

Nu när vi förstår några av de grundläggande skillnaderna mellan ActionScript och Lua, kan vi börja
process för att överföra spelet mellan dem. Källkoden för denna handledning och bifogad till detta inlägg inkluderar
ursprunglig källkod och den färdiga koden för dagens projekt.

Syntax

För att göra porting lättare under vägen börjar vi genom att konvertera all syntax i vår källa
filer, utan att göra gällande själva programlogiken. På det här sättet, när vi börjar arbeta med logiken,
Koden kommer redan att formateras korrekt. Låt oss börja processen med Main.as-filen, vilken ser ut
något som det här:

 paket import org.flixel. *; importera de.pixelate.flixelprimer. *; [SWF (bredd = "640" ,, backgroundColor = "# ABCC7D")] [Ram (factoryClass = "Preloader")] public class Main utökar FlxGame public function Main (): void super (640, 480, PlayState, 1); 

Det finns inte mycket att göra här. Vi behöver inte "paketdeklarationen", så vi kan ta bort kodens övre och nedre rader.

 importera org.flixel. *; importera de.pixelate.flixelprimer. *; [SWF (bredd = "640" ,, backgroundColor = "# ABCC7D")] [Ram (factoryClass = "Preloader")] public class Main utökar FlxGame public function Main (): void super (640, 480, PlayState, 1); 

Eftersom Lua inte har klasser kan vi ta bort raden "public class Main extends FlxGame" och det är
motsvarande konsoler.

 importera org.flixel. *; importera de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Ram (factoryClass = "Preloader")] allmän funktion Main (): void super (640, 480, PlayState, 1); 

Nu kan vi arbeta med huvudfunktionen (). Först och främst märker du den "offentliga" deklarationen av metoden.
Lua har inga separata funktionstyper, så vi kan ta bort det. Kom ihåg att i Lua fungerar
Deklarera inte deras returtyp. Det finns ett nyckelord ": void" i slutet av funktionsdeklarationen.
Det betyder att denna funktion inte kommer att returnera ett värde, vilket inte är nödvändigt i Lua. Så vi kan släppa
Det. Du kanske vill bara kommentera det för referens senare. Slutligen ta bort fästena runt
Main (). I lua använder vi ord. Lägg till "slutet" i slutet av funktionen.

 importera org.flixel. *; importera de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Ram (factoryClass = "Preloader")] funktion Main () -: void super (640, 480, PlayState, 1); slutet

För att pakka upp saker, ta bort alla semikolonerna ";" och kommentera alla rader av kod. Detta
sätt kan vi börja logga in utan att få fel.

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

Vid denna tidpunkt vill du skapa en projektmapp för att hålla dina filer. Jag ringde min
"Alien_shooter". Det här är den mapp som du kommer att skicka till Corona när du är redo att köra din
koda. Inne i mappen söker Corona efter filen "main.lua". Corona är skiftlägeskänslig, så du
får inte kapitalisera första bokstaven som i "Main.as". Spara ovanstående kod som main.lua.

Låt oss gå vidare till nästa fil. Idag arbetar vi bara med två av källfilerna. Den andra
filen finns i "de / pixelate / flixelprimer / PlayState.as" i den bifogade källkoden. Den här filen är där
all spelning hanteras. Som sådan är det den längsta filen. Vi kommer att ändra syntaxen i små bitar.
Precis som huvudfilen har den här koden en paket- och klassdeklaration. Ta bort de linjer som börjar
med "paket" och "Public Class PlayState" och deras parentes.

Vi ser nu en lista över lokala variabler.

? privat varelse: fartyg; privat var _aliens: FlxGroup; privata var _bullets: FlxGroup; privat var _scoreText: FlxText; privat var _gameOverText: FlxText; privat var _spawnTimer: Number; privat var _spawnInterval: Number = 2.5;? 

Kom ihåg från tidigare att variabler i Lua är antingen lokala eller globala, och att de inte behöver
deklarera sin typ. Ändra variablerna så här:

? lokalt lokala lokala _bullets; lokal _scoreText; lokal _spawnInterval = 2,5;? 

Flytta nu ned i listan över funktionsdeklarationer, börja med skapa (). Ta bort alla deklarationer av funktionstyp, till exempel "offentliga"
eller "åsidosätta allmänheten". Kommentera eller ta bort alla returtyper för funktionerna. Nästan alla dessa funktioner är ": void". Byt funktionens fästen med "slutet". Skapa () ska nu se ut så här:

? funktion skapa () -: void FlxG.score = 0; bgColor = 0xFFABCC7D; _ship = nytt skepp (); lägg (_ship); _aliens = ny FlxGroup (); lägg (_aliens); _bullets = nya FlxGroup (); lägg (_bullets); _scoreText = ny FlxText (10, 8, 200, "0"); _scoreText.setFormat (null, 32, 0xFF597137, "vänster"); lägg (_scoreText); resetSpawnTimer (); super.create (); slutet? 

När vi anländer till funktioner som uppdatering () måste vi också ta itu med om-då uttalanden. Bara
Byt ut öppningsfästet "" med "sedan" och stängningsfästet "" med "slutet". Alla "&&" ska
ersättas med "och". "||" bör ersättas med "eller".

? funktionsuppdatering () -: void FlxU.overlap (_aliens, _bullets, overlapAlienBullet); FlxU.overlap (_aliens, _ship, overlapAlienShip); om (FlxG.keys.justPressed ("SPACE") och _ship.dead == false) spawnBullet (_ship.getBulletSpawnPosition ()); avsluta om (FlxG.keys.ENTER och _ship.dead) sedan FlxG.state = new PlayState (); slutet _spawnTimer - = FlxG.elapsed; if (_spawnTimer < 0) then spawnAlien(); resetSpawnTimer(); end super.update(); end? 

Vissa funktioner, som överlappAlienBullet (), tar argument. I ActionScript måste vi förklara vilken typ av argument vi ska passera. Funktionen overlapAlienBullet () tar en variabel "alien" (av typen Alien) och en variabel som heter "bullet" (av typen Bullet). Dessa typdeklarationer bör tas bort. ÖverlappAlienBullet () har också lokala variabler. Ta bort typdeklarationerna från dessa också. Obs! Lokala variabla deklarationer måste ha sökordet lokalt före dem.

Innan:

? privat funktion överlappAlienBullet (alien: Alien, bullet: Bullet): void var emitter: FlxEmitter = createEmitter (); emitter.at (främmande); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); ? 

Efter:

? funktion överlappAlienBullet (alien, bullet) -: void local emitter = createEmitter (); emitter.at (främmande); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); slutet? 

Den allra sista funktionen, createEmitter (), har en för-do-förklaring. Vi använder inte den här funktionen
i sista matchen, men vi bör ta en titt på detta uttalande:

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

Den övre raden av kod skapar en variabel "i" med ett värde på 0. Koden i parenteserna upprepas sedan
själv medan "jag" är mindre än de variabla "partiklarna". Varje slinga, variabeln "jag" får
ökas med 1.

 för i = 0, gör partiklar-1? slutet

Ovanstående Lua-förklaring skapar en variabel "i" med ett värde på 0. Koden i parenteserna
upprepar sig tills "jag" är lika med variabeln "partiklar" minus 1 (detsamma som att kontrollera om "jag"
är mindre än "partiklar"). Variabeln "i" ökar också med 1 varje slinga.

Vi kan nu paketera upp med bara syntax. Ta bort alla semikolonerna. Kommentera hela koden som
med huvudfilen. Lägg till en rad kommentarer före enskilda kodrubriker.

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

Lägg till multiline kommentarer om funktioner och bitar av kod.

 --[] function () -: void FlxG.score = 0 bgColor = 0xFFABCC7D _ship = nytt Ship () add (_ship) _aliens = nytt FlxGroup () add (_aliens) _bullets = nytt FlxGroup () add (_bullets) _scoreText = New FlxText (10, 8, 200, "0") _scoreText.setFormat (null, 32, 0xFF597137, "vänster") lägg till (_scoreText) resetSpawnTimer () super.create () end -]]

Fortsätt och spara den här filen som PlayState.lua i din projektmapp. Lägg det inte i en underkatalog
som källkoden. Corona har problem med moduler i underkataloger.

Moduler och kräver

Nu är vi redo att starta logiken bakom det här spelet. Låt oss prata om fillogiken först.
I vår ActionScript-källa körs Main.as-filen först. De andra filerna, t.ex.
PlayState.as, kallas paket. Dessa paket importeras till huvudfilen. I Lua, den
main.lua-filen körs först. De andra filerna är kända som moduler och krävs i
huvudfilen. I ActionScript har paket paketdeklaration. I Lua måste moduler också ha en
deklarationen, eller huvudfilen kan inte se dem. Det betyder att vi måste ändra vår PlayState.lua-fil.
Överst i filen, eller någon annan modulfil, lägg till den här raden så att main.lua kan fungera med
modul.

 modul (?, package.seeall)

Gå nu tillbaka till main.lua-filen så att vi kan ladda vår modul. Det borde se ut så här:

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

Vi ser att den ursprungliga ActionScript-koden importerade alla paket i "org / flixel" och i
"De / Pixelate / flixelprimer". Byt ut dessa linjer för att göra detta:

 lokala PlayState = kräver ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Ram (factoryClass = "Preloader")] - funktion Main void - super (640, 480, PlayState, 1) --end

Den här koden skapar en ny variabel (som är lokal för huvudfilen) för att hålla den obligatoriska modulen. Vi
kan nu komma åt någon av koden från filen PlayState.lua från variabeln "PlayState".

OOP I Lua

Innan vi fortsätter med main.lua behöver vi göra några ändringar i PlayState.lua. Om vi ​​tittar på
original PlayState.as-fil, ser vi att all funktionalitet är invecklad i en klass
kallad PlayState. Vi kan inte skapa klasser med lua, men vi kan organisera vår kod på ett sätt att göra
det objektorienterade. Genom att omsluta all funktionalitet med en konstruktörfunktion kan vi uppnå
samma effekt. Om du håller all din kod kommenterad lägger du till dessa rader runt hela koden.

 funktion PlayState ()? koden går här? slutet

Nu är alla funktionerna lokala för funktionen PlayState. Dessa funktioner blir privata till
ett slags PlayState-instans som skapas när PlayState () heter. Om du ville efterlikna en
klassmetoden kan du lägga ut deklarationen utanför funktionen. Vi lär oss i senare lektioner
hur man skapar instansmetoder här också.

Här är en exempelmodul som visar denna funktion:

 modulen (?, package.seeall) local numberOfInstances = 0 - den här funktionen mimikerar en klassmetodfunktion getNumberOfInstances () returnummerOfInstances end - denna funktion efterliknar en klassfunktion Instans () local Instance =  numberOfInstances = numberOfInstances + 1 local instanceNumber = numberOfInstances - den här funktionen liknar en instansmetodfunktion Instans: getInstanceNumber () returnera instanceNumber end - den här funktionen efterliknar en privat metodfunktion skapa () returnera Instans slut - det här kallas den privata metoden när alla funktioner har blivit deklarerade skapa () slutet

Om du vill spela med ovanstående kod, här är en main.lua-fil som visar användningen (förutsatt att
modulen sparas som test.lua):

 lokalt test = kräver ("test") local instance1 = test.Instance () local instance2 = test.Instance () local instance3 = test.Instance () local instance4 = test.Instance () print (test.getNumberOfInstances (instance2: getInstanceNumber ())

Observera att modulens funktioner använder punktsyntax medan alla andra Lua fungerar (och till och med några av
deras deklarationer som vi såg) använd ett kolon (:) istället för pricken. Detta kan vara förvirrande, som
Egenskaper i Lua nås med punktsyntax. På grund av detta lämnade vi alla funktionssamtal
ensam medan du sätter in syntaxen tidigare. Vi bestämmer oss för att använda ett kolon eller en punkt för varje enskilt fall
vi stöter på.

Nu när vi har all funktionalitet i PlayState.lua i PlayState () -funktionen, alla
Funktionerna mimar nu privata funktioner i ActionScript. Vilket är exakt
vad vi vill. Lägg till en lokal PlayState-variabel högst upp i funktionen.

 funktion PlayState () lokala PlayState = ? slutet

Nu, fortsätt och uncomment skapar () -funktionen och flytta den till botten (strax före
sista änden). Lägg till en rad kommentarer till alla raderna inuti funktionen, så vi kan fortfarande
se logiken, men det kastar inte några fel.

 modul (?, package.seeall) funktion PlayState () lokala PlayState = ? en hel massa kommenterad kod? funktionen skapa () -: void --FlxG.score = 0 --bgColor = 0xFFABCC7D --_ ship = nytt skepp () --add (_ship) --_ aliens = new FlxGroup () --add (_aliens) - _bullets = new FlxGroup () --add (_bullets) --_ scoreText = ny FlxText (10, 8, 200, "0") --_ scoreText.setFormat (null, 32, 0xFF597137, "vänster") --add (_scoreText ) --resetSpawnTimer () --super.create () änden

Flytta till Coronas API

Det ursprungliga ActionScript-spelet byggdes med hjälp av flixel-biblioteket som diskuterades i början av detta
lektion. Tyvärr finns det ingen Lua-port av flixel med detta skrivande. Så ska vi vara
implementera alla flixel logik med Corona SDK API.

De första sakerna att notera är tillbaka i main.lua-filen. I flixel fungerar huvudmenyn () automatiskt
kallas när programmet körs. I Corona körs main.lua-filen från toppen till botten.
Så, för att uppnå samma effekt som i källan, lägg till Main () till slutet av main.lua.

 lokala PlayState = kräver ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Ram (factoryClass = "Preloader")] funktion Huvud () -: void - - super (640, 480, PlayState, 1) slut Main ()

I de flesta flixel spel visas också en förladare med flixel-logotypen medan programmet är
läser in. Vi behöver inte det för vår app, så vi kommer inte göra en preloader.lua-fil. Linjerna lägger till
Preloader och inställning av programstorlek / bakgrund kan tas bort (vi kan inte ändra appen
storlek).

 lokal PlayState = kräver ("PlayState") funktion Huvud () -: void - super (640, 480, PlayState, 1) slut Main ()

Medan vi är här, skapa en ny PlayState i Main ().

 lokala PlayState = kräver ("PlayState") funktion Main () -: void PlayState.PlayState () slut Main ()

Återgår till PlayState.lua, vi märker att skapa () inte heter. I flixel skapar du () och
uppdatering () hanteras automatiskt. Vi måste ta hand om dessa själva i Corona. Lägg till en
ring för att skapa () före sista änden.

 modul (?, package.seeall) funktion PlayState () lokala PlayState = ? en hel massa kommenterad kod? funktion skapa () -: void? kommenterade skapa () logik? avsluta skapa () slutet

Innan vi går vidare, låt oss ta en titt på vad vi har hittills. Vi har nu en main.lua-fil som
kräver PlayState.lua och kör PlayState (). PlayState () skapar en ny PlayState-instans och sedan
samtal skapa (). Skapa () är där all uppställningskod för spelet går. Vi har nu en ram
att bygga vår logik runt.

Visa objekt

Vi måste nu börja lägga till funktioner i vår create () -funktion för att skapa vårt spel. Låt oss börja med
skapa spelets grönfärgade bakgrund. I vår kod har vi denna linje kommenterat i vår
skapa () funktion.

 --bgColor = 0xFFABCC7D;

Detta berättar för det hexadecimala värdet för den ursprungliga gröna färgen. Ett enkelt sätt att skapa en bakgrund
i Corona är att göra en färgad rektangel som är lika stor som skärmen. Detta kan göras med
Coronas visningsobjekt. På samma sätt som ActionScript ger Corona oss ett API för att visa objekt till
skärmen. Vi kan använda skärmmodulen för många olika uppgifter. Det kan användas för att skapa
nya objekt eller grupper av objekt, eller för att hitta skärmens bredd / höjd. Låt oss skapa en ny
rektangel och spara den som en egenskap av vår PlayState-variabel.

 modul (?, package.seeall) funktion PlayState () lokala PlayState = ? en hel massa kommenterad kod? funktion skapa () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight)? kommenterade skapa () logik? avsluta skapa () slutet

Här skapade vi en ny rektangel från (0,0) till (skärmens bredd, skärmens höjd) och lagras
det i variabeln _background. Jag lägger underskriften där för att efterlikna originalkoden. Allt
av de privata variablerna i ActionScript-versionen av spelet börjar med en understrykning.
_background är privat för varje PlayState-instans, så jag formaterade den som de andra variablerna.

Notera punktsyntaxen. Om du kommer ihåg från tidigare betyder det att _background nu är en egenskap av
PlayState. Eftersom vi skapade den variabla PlayState utanför funktionen create (), är den tillgänglig
nu till alla funktioner. Om vi ​​hade skapat PlayState inuti skapa () så här:

 Modul (?, package.seeall) funktion PlayState () funktion skapa () - PlayState är nu lokalt för att skapa () lokala PlayState =  - PlayState kan fortfarande användas för att skapa, men det är inte tillgängligt utomhus. PlayState._aNumber = 10 slutfunktion otherFunction () - Detta kommer att kasta ett fel. otherFunction vet inte vad PlayState är. skriva ut (PlayState._aNumber) avsluta skapa () otherFunction () slutet

Vi skulle inte ha kunnat använda den i otherFunction (). Sedan vi skapade PlayState i början
av PlayState (), kan alla funktioner använda den.

 modulen (?, package.seeall) funktionen PlayState () - PlayState är nu lokal till PlayState () lokala PlayState =  funktion skapa () - PlayState (och dess egenskaper) kan användas i skapa och någon annanstans. PlayState._aNumber = 10 slutfunktion otherFunction () PlayState._aNumber = PlayState._aNumber + 4 - Detta kommer att skriva ut 14 tryck (PlayState._aNumber) end create () otherFunction () slutet

Om du kör koden med den nya rektangeln ser du en vit bakgrund. Vi behöver ändra dess
fyll färgen till grön. För att göra detta måste vi konvertera hex-koden (ABCC7D) till RGB, vilket är vad
Corona använder sig för att fylla i visningsobjekt. Du kan klistra in den här koden i någon av hex-till-RGB-webbplatser.
Resultatet blir (171, 204, 125). Använd nu setFillColor-instansmetoden (märk kolon) på
PlayState._background.

 modul (?, package.seeall) funktion PlayState () lokala PlayState = ? en hel massa kommenterad kod? funktion skapa () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? kommenterade skapa () logik? avsluta skapa () slutet

Nu har vi början på ett spel. Låt oss göra några fler ändringar innan vi släpper upp för dagen.
Låt oss lägga till en variabel för varje instans av PlayState för att se om spelet är igång eller inte.

 modul (?, package.seeall) funktion PlayState () lokala PlayState = ? en hel massa kommenterad kod? funktion skapa () -: void PlayState._inGame = true PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? kommenterade skapa () logik? avsluta skapa () slutet

Det blir mycket användbart senare. Låt oss också bli av med statusfältet överst på iPhone.
Vi vill bara att detta görs en gång när appen startas, så lägg till den här till main.lua.

 lokala PlayState = kräver ("PlayState") funktion Main () -: void display.setStatusBar (display.HiddenStatusBar) PlayState.PlayState () slut Main ()

Ett annat viktigt steg när du gör en Corona-app är att lägga till en config-fil som kommer att berätta för Corona hur
att skala din app på andra plattformar. I denna handledning berör vi bara iPhone: s
skärmstorlek (även om appen kommer att köras på Android också). Skapa en fil som heter config.lua och fyll i den
med detta.

 application = content = width = 320, height = 480, scale = "letterbox",

Nu kommer vår app att springa på näthinnan också. Obs! Den här filen kommer att fungera med någon Corona-app.

Slutsats

Vi har nu en fungerande ram för att börja bygga vidare. Vår app ser inte ut som mycket ännu, men vi
har täckt många viktiga steg i porting från ett språk till ett annat. I nästa
lektion i denna serie kommer vi att börja göra ett spelbart spel.