Lag et Space Invaders Game i Corona Project Setup

Hva du skal skape

I denne tredelte serien vil jeg vise deg hvordan du lager et spill inspirert av det populære syttitallet, Space Invaders. Underveis lærer du om Coronas scenehåndteringsfunksjonalitet, timere, flytte et tegn, den innebygde fysikkmotoren, og hvordan du bruker moduler for å etterligne klasser i Lua programmeringsspråk.

1. Nytt prosjekt

Åpne Corona Simulator, klikk Nytt prosjekt, og konfigurer prosjektet som vist nedenfor.
Velg et sted for å lagre prosjektet ditt og klikk OK. Dette vil opprette en mappe med et antall ikoner og tre filer som er viktige for oss, main.lua, config.lua, og build.settings.
Vi tar en titt på hver fil i de neste trinnene.

2. Bygg innstillinger

De build.settings Filen er ansvarlig for prosjektets byggetidseiendommer.
Åpne denne filen, fjern innholdet, og fyll den med følgende konfigurasjon.

settings = orientation = default = "portrait", støttet = "portrait",,

I build.settings, Vi setter standardretningen og begrenser søknaden
å bare støtte en stående orientering. Du kan lære hvilke andre innstillinger du kan inkludere i
build.settings ved å utforske Corona-dokumentasjonen.

3. Programkonfigurasjon

De config.lua filen håndterer programmets konfigurasjon. Som vi gjorde med build.settings,
åpne denne filen, fjern innholdet, og legg til følgende konfigurasjon.

søknad = content = width = 768, height = 1024, skala = "letterbox", fps = 30,

Dette angir standardbredde og høyde på skjermen, bruker letterbox å skalere bildene,
og setter rammeprisen til 30. Besøk Corona-dokumentasjonen for å lære mer om de andre egenskapene du kan sette inn config.lua.

4. Entry Point

De main.lua fil er filen som søknaden lastes først og bruker for å starte opp programmet. Vi skal bruke main.lua for å angi noen standardinnstillinger for programmet og bruk komponist bibliotek for å laste den første skjermen.

Hvis du ikke er kjent med Coronas Composer-bibliotek, så anbefaler jeg å gi
dokumentasjon en rask lesning. Kort sagt, Composer er den innebygde løsningen til scene (skjerm) opprettelse og styring i Corona. Biblioteket gir utviklere en enkel måte å opprette og overføre mellom individuelle scener.

Den nyere Composer-modulen erstatter den eldre og nå avviklet Storyboard modul. En overføringsguide er tilgjengelig for å hjelpe deg med å konvertere dine gamle prosjekter til å bruke Komponist.

5. Skjul statuslinje

Vi ønsker ikke at statuslinjen skal vises i vår søknad. Legg til følgende kodestykke til main.lua for å skjule statuslinjen.

display.setStatusBar (display.HiddenStatusBar)

6. Angi standard ankerpunkter

For å angi standard anker eller registreringspunkter, legg til følgende kodeblokk til main.lua.

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


De anchorX og anchorY Egenskaper spesifiserer hvor du vil at registreringspunktet for skjermobjektene skal være. Vær oppmerksom på at verdien varierer fra 0.0 til 1.0. For eksempel, hvis du vil at registreringspunktet skal være øverst til venstre på skjermobjektet, vil du sette begge egenskapene til 0.0.

7. Frø Random Generator

Vårt spill vil bruke Lua math.random funksjon for å generere tilfeldige tall. For å sikre at tallene er virkelig tilfeldig hver gang applikasjonen går, må du oppgi en frøverdi. Hvis du ikke gir en frøverdi, vil applikasjonen generere den samme tilfeldigheten hver gang.

En god frøverdi er Luas os.time funksjon siden det vil være annerledes hver gang
programmet kjøres. Legg til følgende kodestykke til main.lua.

math.randomseed (os.time ())

8. Unngå Globals

Når du bruker Corona, og spesielt Lua-programmeringsspråket, er det en måte å få tilgang til variabler over hele applikasjonen på global variabler.Måten du erklærer en global variabel, er å forlate søkeordet lokal foran den variable deklarasjonen.

For eksempel erklærer følgende kodeblokk to variabler. Den første er en lokal variabel som bare ville være tilgjengelig i kodeblokken den er definert i. Den andre er en global variabel som er tilgjengelig hvor som helst i applikasjonen.

lokal iamalokalvariabel = "lokal" iamaglobalvariable = "global"

Det anses generelt dårlig praksis å bruke globale variabler. Den mest utbredte grunnen er å unngå å kalle konflikter, det vil si å ha to variabler med samme navn. Vi kan løse dette problemet ved å bruke moduler. Opprett en ny Lua-fil, gi den navnet gamedata.lua, og legg til følgende kode for den.

M =  returnere M

Vi oppretter bare et bord og returnerer det. For å utnytte dette bruker vi Lua krever metode. Legg til følgende til main.lua.

lokale gameData = krever ("gamedata") 

Vi kan da legge til nøkler til gameData, som vil være faux global variabler. Ta en titt på følgende eksempel.

gameData.invaderNum = 1 - Brukes til å holde oversikt over nivået vi er på gameData.maxLevels = 3 - Maks antall nivåer spillet vil ha gameData.rowsOfInvaders = 4 - Hvor mange rader av invaders som skal opprettes

Når vi ønsker å få tilgang til disse variablene, er alt vi trenger å gjøre ved å bruke krever funksjon å laste gamedata.lua. Hver gang du laster inn en modul med Lua krever funksjon, legger det til modulentil en package.loaded bord. Hvis du laster inn en modul, vil package.loaded bordet kontrolleres først for å se om modulen allerede er lastet. Hvis det er, bruker den den bufret modulen i stedet for å laste den på nytt.

9. Krev Komponist

Før vi kan bruke Composer-modulen, må vi først kreve det. Legg til følgende til main.lua.

lokal komponist = krever ("komponist")

10. Legg inn startscenen

Legg til følgende kodestykke til main.lua. Dette vil gjøre søknaden gå til den nevnte scenen start, som også er en Lua-fil, start.lua. Du trenger ikke å legge til filtypen når du ringer til gotoScene funksjon.

komponist.gotoScene ("start")

11. Start scenen

Opprett en ny Lua-fil som heter start.lua i prosjektets hovedkatalog. Dette blir en komponistfil, som betyr at vi må kreve komponentmodulen og lage en komponistscene. Legg til følgende utdrag til start.lua.

lokal komponist = krever ("komponist") lokal scene = composer.newScene () retur scene

Anropet til newScene gjør at start.lua en del av komponistens scenehierarki. Dette betyr at det blir en skjerm i spillet, som vi kan ringe komponist metoder på.

Herfra er koden lagt til start.lua bør plasseres over komme tilbake uttalelse.

11. Lokale variabler

Følgende er de lokale variablene vi trenger for start scene.

lokal startButton - brukes til å starte spillet lokalt pulsatingText = krever ("pulserende tekst") - En modul som gir en pulserende tekst-effekt lokal starFieldGenerator = krever ("starfieldgenerator") - En modul som genererer StarFieldGenerator lokale StarGenerator - En forekomst av starFieldGenerator

Det er viktig å forstå at lokale variabler i hovedklumpen bare blir kalt en gang,
når scenen lastes for første gang. Når du navigerer gjennom komponist scenene, for eksempel ved å påkalle metoder som gotoScence, De lokale variablene vil allerede bli initialisert.

Dette er viktig å huske om du vil at de lokale variablene skal reinitialiseres når
navigerer tilbake til en bestemt scene. Den enkleste måten å gjøre dette på er å fjerne scenen fra komponisthierarkiet ved å ringe removeScence metode. Neste gang du navigerer til den aktuelle scenen, blir den automatisk lastet opp. Det er den tilnærmingen vi skal ta i denne opplæringen.

DepulsatingText og starFieldGenerator er to egendefinerte moduler vi skal lage for å legge til klasselignende funksjonalitet til prosjektet. Opprett to nye filer i prosjektmappen din som heter pulsatingtext.lua og starfieldgenerator.lua.

12. Storyboard Events

Hvis du har tatt deg tid til å lese dokumentasjonen på Composer, som jeg koblet til tidligere,
Du har lagt merke til at dokumentasjonen inneholder en mal som inneholder alt mulig
komponist hendelse. Kommentarene er svært nyttige da de angir hvilke hendelser som skal utnytte for å initialisere aktiver, timere, etc. Vi er interessert i scene: opprette, scene: Vis, og scene: hide metoder for denne opplæringen.

Trinn 1: scene: opprette

Legg til følgende kodestykke til start.lua.

funksjonsscene: opprett (hendelse) lokal gruppe = self.view startButton = display.newImage ("new_game_btn.png", display.contentCenterX, display.contentCenterY + 100) gruppe: sett inn (startButton) slutten

Denne metoden kalles når scenens syn ikke eksisterer ennå. Her skal du initialisere skjermobjektene og legge dem til scenen. De gruppe variabel peker på self.view, hvilken er en GroupObject for hele scenen.

Vi lager start knapp ved å bruke Vise objektets newImage metode som tar parametrene til banen og bildet x og y verdier for bildeets posisjon på skjermen.

Steg 2: scene: Vis

komponistens scene: Vis Metoden har to faser. De vil Fase kalles når scenen fortsatt er på skjermen, men kommer snart på skjermen. De gjorde fase kalles når scenen er på skjermen. Det er her du vil legge til kode for å få scenen til å komme i live, starte timere, legge til hendelselyttere, spille av lyd osv.

I denne opplæringen er vi bare interessert i gjorde fase. Legg til følgende kodestykke til start.lua.

funksjonsscene: show (event) lokal fase = event.phase local previousScene = composer.getSceneName ("tidligere") hvis (tidligereScene ~ = nil) så komponent.removeScene (previousScene) avslutte hvis (fase == "gjorde") da startButton : addEventListener ("tap", startGame) slutten

Vi erklærer en lokal variabel fase, som vi bruker til å sjekke hvilken fase den vise fram Metoden er inne. Siden vi kommer tilbake til denne scenen senere i spillet, sjekker vi for å se om det er en tidligere scene og i så fall fjerne den. Vi legger til en springen lytter til start knapp som kaller start spill funksjon.

Trinn 3: scene: hide

komponistens scene: hide Metoden har også to faser. De vil Fase kalles når scenen er på skjermen, men er i ferd med å gå på skjermen. Her vil du stoppe alle timere, fjerne hendelseslyttere, stoppe lyd, etc. Den gjorde fase kalles når scenen har gått på skjermen.

I denne opplæringen er vi bare interessert i vil fase der vi fjerner springen lytter fra start knapp.

funksjonsscene: skjul (hendelse) lokal fase = event.phase hvis (fase == "vil") da startButton: removeEventListener ("tap", startGame) slutten

16. Start spillet

De start spill funksjon kalles når brukeren tapper start knapp. I denne funksjonen påberoper vi oss gotoScene komponist metode, som vil ta oss til gamelevel scene.

funksjon startGame () composer.gotoScene ("gamelevel") slutten

17. Game Level Scene

Opprett en ny fil som heter gamelevel.lua og legg til følgende kode for den. Dette skal se kjent ut. Vi lager en ny scene og returnerer den.

lokal komponist = krever ("komponist") lokal scene = composer.newScene () retur scene

18. Legg til scenelyttere

Vi må legge til scene lyttere for skape, vise fram, og gjemme seg metoder. Legg til følgende kode til start.lua.

scene: addEventListener ("create" scene) scene: addEventListener ("show", scene) scene: addEventListener ("hide" scene) 

19. Test fremgang

Hvis du tester spillet nå, bør du se en svart skjerm med en knapp du kan trykke på. Hvis du trykker på knappen, skal du ta deg til gamelevel scene, som nå er bare en blank skjerm.

Konklusjon

Dette bringer denne delen av serien til en slutt. I neste del vil vi begynne å implementere spillets spill. Takk for at du leser og ser deg i den andre delen av denne serien.