I denne opplæringsserien lærer du hvordan du lager et spill som Snake. Målet med spillet er å ta tak i eplene på skjermen for å øke poengsummen. Les videre!
Vær så snill å sjekke del 1 av serien for å forstå og forberede seg på denne opplæringen.
Denne funksjonen legger de nødvendige lytterne til TitleView knapper.
funksjon startButtonListeners (action) hvis (action == 'add') så spillBtn: addEventListener ('tap', showGameView) kreditterBtn: addEventListener ('tap', showCredit) annet playBtn: removeEventListener ('tap', showGameView) creditsBtn: removeEventListener "trykk", showCredits) slutten
Kredittskjermbildet vises når brukeren tapper om knappen, a springen lytteren legges til kredittvisningen for å fjerne den.
funksjon showCredits: trykk (e) playBtn.isVisible = false creditsBtn.isVisible = false creditsView = display.newImage ('credits.png', display.contentCenterX - 110, display.contentHeight + 40) transition.to (creditsView, time = 300, y = display.contentHeight-20, onComplete = funksjon () kreditterVis: addEventListener ('tap', hideCredits) end) ende
Når kreditter skjermen er tappet, vil den bli tweened ut av scenen og fjernet.
funksjon hideCredits: trykk (e) playBtn.isVisible = true creditsBtn.isVisible = true transition.to (creditsView, time = 300, y = display.contentHeight + creditsView.height, onComplete = function () creditsVis: removeEventListener , hideCredits) display.remove (creditsView) creditsView = null end) slutt
Når Start knappen er tappet, tittelvisningen er tweened og fjernet avslørende spillvisningen. Det er mange deler involvert i denne visningen, så vi deler dem i de neste trinnene.
funksjon showGameView: trykk (e) transition.to (titleView, time = 300, x = -titleView.height, onComplete = funksjon () startButtonListeners ('rmv') display.remove (titleView) titleView = null end)
Denne koden plasserer spillets bakgrunn i scenen.
-- [Legg til GFX] - Spill Bg gameBg = display.newImage ('gameBg.png')
For å flytte slangen på skjermen trenger vi en spillpute, dette vil ta vare på det. EN springen lytter vil bli lagt til senere til hver pil for å håndtere bevegelsen.
-- Pute opp = display.newImage ('up.png', 33,5, 219,5) left = display.newImage ('left.png', 0, 252,5) down = display.newImage ('down.png', 33,5, 286,5) til høyre = display.newImage ('right.png', 66.5, 252.5) up.name = 'opp' down.name = 'ned' left.name = 'left' right.name = 'right'
Denne linjen legger til tekstfeltet:
-- Resultattekst = display.newText ('0', 74, 3, native.systemFontBold, 15) score: setTextColor (252, 202, 1)
Deretter legger vi til slangens hode. Som nevnt i forrige veiledning, a hit område vil bli lagt på toppen av det, og begge vil bli lagret i en gruppe.
-- Head headGFX = display.newImage ('head.png', display.contentCenterX-0.3, display.contentCenterY-0.2) headHitArea = display.newLine (display.contentCenterX + 6, display.contentCenterY-0.2, display.contentCenterX + 8, display .contentCenterY-0.2) headHitArea: setColor (0, 0, 0) headHitArea.width = 2 head = display.newGroup (headGFX, headHitArea) lastPart = head parts = display.newGroup ()
Det første eplet legges til med denne koden i tilfeldig posisjon.
-- Legg til første apple lokale randomX = 25 + math.floor (math.random () * 402) lokale randomY = 25 + math.floor (math.random () * 258) lokale apple = display.newImage ('apple.png' randomX, randomY) epler = display.newGroup (apple) gameListeners () slutten
Denne funksjonen legger til de nødvendige lytterne for å starte spilllogikken.
funksjon spillListeners () opp: addEventListener ('tap', movePlayer) igjen: addEventListener ('tap', movePlayer) ned: addEventListener ('tap', movePlayer) right: addEventListener
Retningsvariabelen endres av denne funksjonen, dette vil få slangen å gå i presset retning.
funksjon movePlayer (e) dir = e.target.name hvis (startet == nil) da timerSrc = timer.performWithDelay (hastighet, oppdatering, 0) startet = sann ende ende
Vi bruker en utmerket og nyttig funksjon for kollisjonsdeteksjon uten fysikk, du finner det opprinnelige eksemplet og kilden på CoronaLabs Code Exchange-nettside.
funksjon hitTestObjects (obj1, obj2) lokal venstre = obj1.contentBounds.xMin <= obj2.contentBounds.xMin and obj1.contentBounds.xMax >= obj2.contentBounds.xMin lokal høyre = obj1.contentBounds.xMin> = obj2.contentBounds.xMin og obj1.contentBounds.xMin <= obj2.contentBounds.xMax local up = obj1.contentBounds.yMin <= obj2.contentBounds.yMin and obj1.contentBounds.yMax >= obj2.contentBounds.yMin lokal ned = obj1.contentBounds.yMin> = obj2.contentBounds.yMin og obj1.contentBounds.yMin <= obj2.contentBounds.yMax return (left or right) and (up or down) end
Vi fanger slangens hode siste posisjon for å oppdatere delposisjonen, hver erstatter x- og y-koordinatene til den andre.
funksjonsoppdatering () - Fang hodets siste posisjon, dette flytter det første tilkoblede stedet lastX = head.x lokale lastY = head.y lokale xPos = lokale yPos =
Dette utfyller oppførselen som er forklart i det forrige trinnet.
for i = 1, deler.numHunder gjør - Fang deler posisjon for å flytte dem xPos [i] = deler [i] .x yPos [i] = deler [i] .y - Flytt Deler hvis (deler [i-1 ] == nil) så deler [i] .x = lastX deler [i] .y = lastY andre deler [i] .x = xPos [i-1] deler [i] .y = yPos [i-1] ende
Spillet slutter når slangens hode berører en annen del av slangen. En lyd spilles som tilbakemelding.
-- Spill over hvis hodet berører andre deler av slangen hvis (hitTestObjects (headHitArea, parts [i])) og skriv ut (deler [i] .name) hvis (deler [i] .name == '1') og skriv ut ') ellers timer.cancel (timerSrc) timerSrc = nil audio.play (gameOver) ende ende
Disse linjene beveger hodet i henhold til retningen fastlagt av movePlayer funksjon opprettet i trinn 11.
-- Flytt Head & Hit Area hvis (dir == 'opp') deretter head.y = head.y - mConst headHitArea.x = headGFX.x headHitArea.y = headGFX.y - 7 elseif (dir == 'left') så head.x = head.x - mConst headHitArea.x = headGFX.x - 8 headHitArea.y = headGFX.y elseif (dir == 'down') deretter head.y = head.y + mConst headHitArea.x = headGFX. x headHitArea.y = headGFX.y + 8 elseif (dir == 'right') deretter head.x = head.x + mConst headHitArea.x = headGFX.x + 7 headHitArea.y = headGFX.y ende
Flere handlinger oppstår når slangen spiser et eple, vil vi gå gjennom dem i følgende trinn.
Først fjerner vi eplet.
-- Oppdag eplerspillerkollisjon for i = 1, epler. Nummerer gjør om (hitTestObjects (hode, epler [i])) da - Fjern Apple display.remove (epler [i])
Deretter oppdaterer vi resultatfeltet og spiller en lyd for å indikere at eplet har blitt spist.
-- Legg til poeng score.text = score.text + tostring (10) score: setReferencePoint (display.TopLeftReferencePoint) score.x = 74 audio.play (appleGrab)
Deretter legges en ny del til slangen. Posisjonen er beregnet ved siste del lagt til (første gang er hodet) og deretter legges de til en gruppe.
-- Legg til slangekroppen lokal del = display.newImage ('bodyPart.png') hvis (dir == 'opp') så del.x = sistePart.x part.y = lastPart.y + mConst elseif (dir == 'left' ) then part.x = lastPart.x + mConst part.y = lastPart.y elseif (dir == 'down') så del.x = lastPart.x part.y = lastPart.y - mConst elseif (dir == ' høyre ') så del.x = sistePart.x - mConst part.y = lastPart.y ende nåværende = nåværende + 1 del.name = tostring (nåværende) lastPart = deldeler: sett inn (del)
Til slutt lager vi et nytt eple og legger det i en tilfeldig posisjon i scenen.
-- Legg til nytt eple lokalt randomX = 25 + math.floor (math.random () * 402) lokale randomY = 25 + math.floor (math.random () * 258) lokale apple = display.newImage ('apple.png' randomX, randomY) epler = display.newGroup (epler) slutten
Dette gjør at slangen vises på den andre siden av scenen.
-- Skjermgrenser hvis (head.x < 0) then head.x = display.contentWidth - mConst elseif(head.x > display.contentWidth) deretter head.x = 0 end - Vertikal hvis (head.y < 0) then head.y = display.contentHeight - mConst elseif(head.y > display.contentHight) og deretter head.y = 0 slutten
For å starte spillet, er Hoved funksjonen må kalles. Med ovennevnte kode på plass, gjør vi det her:
Hoved()
Default.png-filen er et bilde som skal vises rett når du starter programmet mens iOS laster de grunnleggende dataene for å vise hovedskjermbildet. Legg til dette bildet i prosjektkildemappen, det blir automatisk lagt til av Corona compliler.
Ved hjelp av grafikken du opprettet før du kan lage et fint og godt utseende-ikon. Ikonstørrelsen for iPhone-ikonet med ikke-retina er 57x57px, men netthinnen versjonen er 114x114px og iTunes-butikken krever en 512x512px-versjon. Jeg foreslår at du oppretter 512x512 versjonen først og deretter skaler ned for de andre størrelsene.
Det trenger ikke å ha de avrundede hjørner eller gjennomsiktig blikk, iTunes og iPhone vil gjøre det for deg.
Det er på tide å gjøre den endelige testen. Åpne Corona Simulator, bla til prosjektmappen din, og klikk deretter Åpne. Hvis alt fungerer som forventet, er du klar for det siste trinnet!
I Corona Simulator gå til Fil> Bygg og velg målrettingsenheten. Fyll de nødvendige dataene og klikk bygge. Vent noen få sekunder, og appen din vil være klar til testing av enheten og / eller innsending for distribusjon!
Eksperimenter med det endelige resultatet, og prøv å lage din egendefinerte versjon av spillet!
Jeg håper du likte denne opplæringsserien og finner den nyttig. Takk for at du leser!