Bygg et Snake Game - Legg til interaksjon

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!


Hvor vi forlot ...

Vær så snill å sjekke del 1 av serien for å forstå og forberede seg på denne opplæringen.


Trinn 1: Startknappslyttere

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

Trinn 2: Vis kreditt

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

Trinn 3: Skjul Credits

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

Trinn 4: Vis spillvisning

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)

Trinn 5: Legg til spillbakgrunn

Denne koden plasserer spillets bakgrunn i scenen.

 -- [Legg til GFX] - Spill Bg gameBg = display.newImage ('gameBg.png')

Trinn 6: Legg til spillpute

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'

Trinn 7: Resultattekst

Denne linjen legger til tekstfeltet:

 -- Resultattekst = display.newText ('0', 74, 3, native.systemFontBold, 15) score: setTextColor (252, 202, 1)

Trinn 8: Hodet

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 ()

Trinn 9: Første Apple

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

Trinn 10: Spillelyttere

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

Trinn 11: Flytt spillerfunksjonen

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

Trinn 12: Hit testobjekter

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

Trinn 13: Hent hovedposisjon

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 = 

Trinn 14: Flytt deler

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

Trinn 15: Sjekk etter spill over

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

Trinn 16: Flytt hode

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

Trinn 17: Apple-Head Collision

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])

Trinn 18: Oppdater Score

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)

Trinn 19: Legg til slangedelen

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)

Trinn 20: Ny Apple

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

Trinn 21: Skjermgrenser

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

Trinn 22: Ring hovedfunksjon

For å starte spillet, er Hoved funksjonen må kalles. Med ovennevnte kode på plass, gjør vi det her:

 Hoved()

Trinn 23: Laster skjerm

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.


Trinn 24: Ikon

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.


Trinn 25: Testing i simulator

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!


Trinn 26: Bygg

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!


Konklusjon

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!