Bygg et Endless Runner-spill fra scratch Spillmenyen

Velkommen til siste avdrag i Endless Runner-serien. I dagens veiledning lærer du hvordan du bygger en spillmeny ved hjelp av direktørklassen. La oss komme i gang!

Gratulerer med å komme så langt i serien! Det har vært en lang løp, men nå har vi et fullt funksjonelt spill og forhåpentligvis en grunnleggende forståelse av hvordan du legger til dine egne komponenter for å utvide på alt. Trinnet vi skal gjøre nå, er å sette vårt lille nivå inn i et menysystem slik at det føles som et fullt spill. 

Vi skal gjøre dette ved å bruke regissørklassen, som er et utrolig godt laget lite bibliotek av Ricardo Rauber som skal gjøre alt arbeidet for deg. Når du ser hvor latterlig lett det er, vil du kunne implementere dette raskt i et hvilket som helst prosjekt.

Det første du må gjøre er å gå til her og laste ned den nyeste versjonen av klassen. Når du laster ned den, kommer den til å gi deg mange filer. Den kommer med mye mer enn bare instruktørklassen, inkludert eksempler, maler og tilleggsfunksjoner som kan gjøre livet enklere, så vær så snill å sjekke ut alt det den har å tilby. Hvis du ikke vil ha alle de morsomme, små statister som tilbys, kan du bare laste ned filene for denne opplæringen og ta den fra derfra.

Nå som vi har director.lua-filen, sett den i samme mappe som main.lua. Snakk om din main.lua-fil, gå videre og endre navn på den. Det spiller ingen rolle hva du endrer det til, for vi kommer til å ende opp med å slette det uansett. Etter at du har gjort dette, skal du lage tre nye filer i den mappen. Ring dem main.lua, menu.lua og game.lua. Grunnleggende om hvordan dette kommer til å fungere er det viktigste. Lua skal bli kalt for å starte spillet. Det kommer til å være grunnlaget for vårt program, mens menu.lua og game.lua skal fungere som komponenter (displayGroups) som vises i et displayGroup inne i main.lua selv, på samme måte som alle de forskjellige viser grupper i vårt spill er alle holdt og vist fra skjermdisplayGruppen i vårt nåværende spill.

Så, første ting først, la oss sette opp vår nye main.lua-fil. Åpne den opp og plop denne koden der inne:

 display.setStatusBar (display.HiddenStatusBar) - ved å fortelle Corona å kreve "regissør", er vi - teller det for å inkludere alt i den filen, - gir oss enkel tilgang til funksjonene. Dette er - også hvordan du vil inkludere noen funksjoner eller - "klasser" som du opprettet i eksterne filer. lokal direktør = krever ("regissør") lokal mainGroup = display.newGroup () local main = funksjon () - dette skaper en visning som vi vil bruke til å laste - de andre scenene inn, slik vårt spill skrider frem vi bor i main.lua-filen - og bare laster nye visninger eller scener inn i den mainGroup: insert (director.directorView) - Vi forteller regissøren å laste den første scenen som - skal bli meny regissør: changeScene ("meny") slutter - vær sikker på at du faktisk ringer hovedfunksjonen hoved ()

Så det er det! Ta bort kommentarene, og du vil se det tar bare om lag 5 linjer for å få regissørkursen i gang. Som det står i kommentarene, er måten dette egentlig virker på, main.lua starter først, men i stedet for å ha strømmen av spillet bli diktert inne i main.lua-filen, lar vi regissørklassen ta over. Vi lager en display.newGroup og reserverer den som hovedvisning. Så når spillet faktisk laster opp, ser alt det du ser faktisk fra main.lua-filen på innsiden av denne skjermgruppen. Ganske pent, huh! Så, når du setter inn visningen i det, må vi bare fortelle regissøren hvilken scene som skal lastes opp, og det tar oss automatisk der. Lett nok, rett?

Den neste tingen vi må gjøre for at dette egentlig skal fungere, er å ha en meny scene. Koden er veldig enkel og det meste vi allerede har sett, så jeg skal legge inn hele filen først og deretter forklare de få tingene som er nye. La oss åpne menyen.lua og se hvor enkelt det er å faktisk lage et enkelt menysystem. Kopier følgende til din menu.lua:

 --denne linjen er nødvendig, slik at regissøren vet at - dette er en scene som kan lastes inn i visningsmodulen (..., package.seeall) - vi må kunne få tilgang til regissørklassen av - kurs så vær sikker på at inkludere dette her lokal direktør = krever ("regissør") lokal sprite = krever ("sprite") - alt du vil at denne scenen skal gjøre, bør være inkludert i den nye funksjonen. Hver gang regissøren - laster en ny scene vil det se her for å finne ut hva - å laste opp. new = function (params) - denne funksjonen vil bli returnert til direktøren lokal menyDisplay = display.newGroup () - alt fra her ned til returlinjen er det som gjør - opp scenen så ... bli gal lokal bakgrunn = vise .newImage ("background.png") background.x = 240 background.y = 160 lokal spriteSheet = sprite.newSpriteSheet ("monsterSpriteSheet.png", 100, 100) lokale monsterSet = sprite.newSpriteSet (spriteSheet, 1, 7) sprite .add (monsterSet, "running", 1, 6, 600, 0) lokalt monster = sprite.newSprite (monsterSet) monster: forberede ("kjører") monster: play () monster.x = 60 monster.y = 200 local monster2 = sprite.newSprite (monsterSet) monster2: forberede ("kjører") monster2: play () monster2.x = 420 monster2.y = 200 monster2.xScale = monster2.xScale * -1 lokal tittel = display.newImage ("title .png ") title.x = 240 title.y = 80 lokal playButton = display.newImage (" playButton.png ") playButton.x = 240 playButton.y = 220 menuDisplay: sett inn (bakgrunn) menyDisplay: sett inn (monster) menyDisplay : inser t (monster2) menysvisning: sett inn (tittel) menysvisning: sett inn (playButton) - dette er det som blir kalt når playButton blir berørt - det eneste som gjør er å ringe overgangen - fra denne scenen til spillscenen, " downFlip "er navnet på overgangen som regissøren bruker lokal funksjonsknappListener (event) regissør: changeScene (" game "," downFlip ") returnerer sann end - dette er litt annerledes måte å oppdage, men det fungerer - bra for knapper. Bare legg eventListener til skjermobjektet - det er knappen som sender hendelsen "touch", som vil ringe funksjonen - knappeliste hver gang displayObject berøres. playButton: addEventListener ("touch", buttonListener) - lagre skjermgruppen på sluttmenyen

En ting som er nytt her er regissøren: changeScene () linje. Det er ganske rett frem som det gjør akkurat det du ville tro det ville. Imidlertid ønsket jeg å peke ut den andre parameteren, "downFlip". Det er mange bygget i overganger som kan gjøre at spillet ditt ser alt fancy når du skifter mellom scener, det avhenger bare av hva du vil at spillet ditt skal se ut. Her er et bilde av vår overgang pågår.

Pass på å prøve ut noen av de forskjellige overgangene for å finne den som vil fungere best for spillet ditt. Du finner en fullstendig liste over dem i director.lua-filen. Bare se på alle de forskjellige effektene og gi dem en virvel. Et par flere eksempler du kan prøve raskt hvis du ikke vil grave, er "crossfade", "overfromtop" og "flipFromBottom" for å nevne noen få! Så, bortsett fra det, er det veldig lite der inne som du ikke har sett før. Alle de tingene er bare å lage en billig liten hovedmenyskjerm. Det er et par ting der inne at du bør ta i betraktning det som kreves i hver scene som regissøren trenger. Den første varen:

 modul (..., package.seeall)

Enkelt og greit. Du trenger den nøyaktige linjen øverst i hver * .lua-fil som regissøren skal bruke som scene. Etter dette har du den nye () -funksjonen som kalles når du går inn i scenen, og alt du vil at scenen skal gjøre, bør være inkludert her. Det første du må gjøre er å lage et displayObject som vil bli returnert til regissøren for å bli vist, så bare sørg for å returnere det på slutten av den nye funksjonen. Det er alt. Lyd lett? Det er fordi det er! Regissørklassen gjør det veldig enkelt. Så lenge bildene dine er på rett sted for menyscenen, bør du kunne kjøre main.lua-filen og få den til å starte uten problemer.

Så langt har vi vår hovedfil og vår hovedmenyfil tatt vare på. Det siste vi må gjøre er å gjøre noen endringer i vår spillfil. Dette kommer også til å være enkelt. Åpne spillet.lua-filen og legg til følgende kode:

 modul (..., package.seeall) lokal direktør = krever ("regissør") new = funksjon (params) lokale spillDisplay = display.newGroup () --pas kode her return spillShow end

Det er bare bare av det du trenger for en scene. For øvrig er dette alt du trenger for å få din gamle main.lua-fil inn i game.lua-filen din. Når du har det der, er det eneste du må gjøre å kopiere hele gamle main.lua-filen og lime den inn der den står, lim inn kode her. Gjør det og du er ferdig ... nesten. Vi skal også gjøre noen endringer i hvordan vi viser vårt spill over meldingen. I stedet for å ha en stor knapp, skal vi bryte den opp i flere mindre knapper som lar oss velge å starte spillet på nytt eller gå tilbake til menyen. La oss begynne å gjøre noen av disse endringene (merk at gameOver.png ble endret for å passe til det nye tastaturlayoutet. Bildens dimensjoner er likevel de samme, så du må ikke gjøre noen andre tilpasninger til det). De første endringene skal være å legge til de nye knappene i spillet.

Legg til denne koden til der vi legger til alle de andre bildene øverst i filen:

 local yesButton = display.newImage ("yesButton.png") yesButton.x = 100 yesButton.y = 600 lokale noButton = display.newImage ("noButton.png") noButton.x = 100 noButton.y = 600

Så vær sikker på å legge dem begge til skjermen også. Legg til disse etter resten av skjerminnsatsene slik at de vises på toppen av alt annet:

 skjerm: sett inn (yesButton) skjerm: sett inn (noButton)

Den neste tingen du vil gjøre er å gå til berørt () -funksjonen og fjern den første hvis / annet setningen slik at den ser slik ut:

 funksjon berørt (hendelse) hvis (monster.isAlive == true) så hvis (event.phase == "startet") så hvis (event.x < 241) then if(onGround) then monster.accel = monster.accel + 20 end else for a=1, blasts.numChildren, 1 do if(blasts[a].isAlive == false) then blasts[a].isAlive = true blasts[a].x = monster.x + 50 blasts[a].y = monster.y break end end end end  end     end

Ved å gjøre dette gjør den berørt funksjonen en som bare håndterer interaksjoner i spillet. Vi skal flytte logikken som starter spillet på nytt til egen funksjon. Legg til disse funksjonene under berørt () -funksjonen:

 funksjon noListener (event) regissør: changeScene ("menu", "downFlip") returnere sann sluttfunksjon yesListener (event) restartGame () returner sann end

Så, ganske rett frem, og det samme som vi har gjort flere ganger nå. Deretter skyter du ned til bunnen av koden der vi legger til våre hørelister og legger til to flere lyttere:

 yesButton: addEventListener ("touch", yesListener) noButton: addEventListener ("touch", noListener)

Så de siste tingene vi må gjøre er å regne for endringene i posisjon til de to knappene når vårt monster dør, og når vi nullstiller spillet. Her er tilleggene vi må ta med for å sikre at de fungerer riktig. I funksjonen restartGame () legger du til dette:

 noButton.x = 100 noButton.y = 600 yesButton.x = 100 yesButton.y = 600

Deretter går du til funksjonen checkCollisions (), hvor du bør se disse linjene flere ganger:

 gameOver.x = display.contentWidth * .65 gameOver.y = display.contentHeight / 2

Legg til denne blokken rett under hver forekomst av det (det skal være 4 alt i alt, en for hver vei å dø):

 yesButton.x = display.contentWidth * .65 - 80 yesButton.y = display.contentHeight / 2 + 40 noButton.x = display.contentWidth * .65 + 80 noButton.y = display.contentHeight / 2 + 40

Når du har alle disse endringene på plass, bør du kunne starte spillet fra main.lua og kunne flytte fra hovedmenyen til spillet ditt, dø, og deretter velge om du vil spille igjen eller å gå tilbake til Menyen. Så, forutsatt at alt er bra, det er slutten, har vi nå vårt spill flyttet inn i et menysystem ved hjelp av instruktørklassen! Vi flyttet veldig raskt gjennom det meste av det, grunnen er at det egentlig ikke var veldig mye nytt innhold. Hvis du har problemer med noen av trinnene, gi meg beskjed i kommentarene, og jeg vil være mer enn gjerne hjelpe deg med å jobbe gjennom dem. Den nye mappen i den nedlastbare filen inneholder også det ferdige produktet, så du kan alltid bruke det som referanse. Forhåpentligvis har denne opplæringsserien vært gunstig for deg når du kommer i gang med spillutvikling med Corona SDK, som du kan se prosessen generelt er veldig enkelt. Corona SDK er kraftig og svært brukervennlig når du får grunnleggende ned. Forhåpentligvis kan du nå gå videre og lage noen fantastiske spill. 

Det vil bli en opplæring for denne serien, men det vil ikke endre spillet i alle fall, men vil fokusere på å sende spillet til appbutikken, da det alltid er et eventyr som gjør det til første gang. Så glad koding og takk for at du følger med!