Construiți un joc de șarpe - adăugați o interacțiune

În această serie de tutori, veți învăța cum să creați un joc precum Snake. Obiectivul jocului este de a apuca merele pe ecran pentru a ridica scorul. Citește mai departe!


Unde am plecat ...

Asigurați-vă că verificați partea 1 din seria să înțeleagă pe deplin și să se pregătească pentru acest tutorial.


Pasul 1: Ascultați butoanele Start

Această funcție adaugă ascultătorilor necesari la TitleView butoane.

 funcția startButtonListeners (acțiune) dacă (action == 'add') atunci playBtn: addEventListener ('tap', showGameView) creditsBtn: addEventListener 'tap', showCredits) sfârșitul final

Pasul 2: Afișați creditele

Ecranul creditelor este afișat când utilizatorul pune butonul aproximativ, a Atingeți ascultător se adaugă la vizualizarea creditelor pentru al elimina.

 funcția showCredit: tap (e) playBtn.isVisible = false crediteBtn.isVisible = credite falseView = display.newImage ('credits.png', display.contentCenterX - 110, display.contentHeight + 40) transition.to (creditsView, time = 300, y = display.contentHeight-20, onComplete = funcție () creditsView: addEventListener ('tap', hideCredits) end

Pasul 3: Ascundeți creditele

Când ecranul de credite este atins, acesta va fi completat din scenă și eliminat.

 funcția ascundeCredite: tap (e) playBtn.isVisible = credite realeBtn.isVisible = adevărat transition.to (creditsView, time = 300, y = display.contentHeight + creditsView.height, onComplete = function () creditsView: , ascundeCredități) display.remove (creditsView) creditsView = nil end) sfârșit

Pasul 4: Afișare vizualizare joc

Cand start butonul este apăsat, vizualizarea titlurilor este completată și eliminată dezvăluind vizualizarea jocului. Există multe părți implicate în această vizualizare, astfel încât le vom împărți în pașii următori.

 funcția showGameView: atingeți (e) transition.to (titleView, time = 300, x = -titleView.height, onComplete = function () startButtonListeners ('rmv') display.remove (titleView) titleView =

Pasul 5: Adăugați fundalul jocului

Acest cod plasează fundalul jocului în etapă.

 -- [Adăugați GFX] - Joc Bg gameBg = display.newImage ('gameBg.png')

Pasul 6: Adăugați Game Pad

Pentru a muta șarpele pe ecran vom avea nevoie de un tampon de joc, acesta va avea grijă de asta. A Atingeți ascultător va fi adăugat mai târziu la fiecare săgeată pentru a face față mișcării.

 -- Puneți sus = display.newImage ('up.png', 33.5, 219.5) left = display.newImage ('left.png', 0, 252.5) ​​jos = display.newImage = display.newImage ('right.png', 66.5, 252.5) ​​up.name = 'sus' down.name = 'jos' left.name = 'left' right.name =

Pasul 7: Scorul de text

Această linie adaugă scorul de text:

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

Pasul 8: Capul

Apoi adăugăm capul șarpelui. După cum sa menționat în tutorialul anterior, a lovit zona vor fi adăugate pe partea de sus a acesteia și apoi ambele vor fi stocate într-un grup.

 -- Capul 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.newGrup (headGFX, headHitArea) lastPart = head parts = display.newGroup

Pasul 9: Apple inițial

Primul măr este adăugat de acest cod într-o poziție aleatorie.

 -- Adăugați primul apple local randomX = 25 + math.floor (math.random () * 258) local apple = display.newImage ('apple.png', randomX, randomY) apples = display.newGrup (măr) gameListeners () sfârșit

Pasul 10: Ascultarea jocurilor

Această funcție adaugă ascultătorii necesari pentru a porni logica jocului.

 ('tap', movePlayer) jos: addEventListener ('tap', movePlayer) la dreapta: addEventListener

Pasul 11: mutați funcția jucătorului

Variabila de direcție este modificată de această funcție, aceasta va face ca șarpele să meargă în direcția presată.

 funcția movePlayer (e) dir = e.target.name dacă (început == nil), apoi timerSrc = timer.performWithDelay (viteză, actualizare, 0) a început = true end end

Pasul 12: Obiective de testare

Vom folosi o funcție excelentă și utilă pentru detectarea coliziunilor fără fizică, puteți găsi exemplul și sursa originale de pe site-ul CoronaLabs Exchange.

 funcția hitTestObjects (obj1, obj2) local stânga = obj1.contentBounds.xMin <= obj2.contentBounds.xMin and obj1.contentBounds.xMax >= obj2.contentBounds.xMin drept local = obj1.contentBounds.xMin> = obj2.contentBounds.xMin și obj1.contentBounds.xMin <= obj2.contentBounds.xMax local up = obj1.contentBounds.yMin <= obj2.contentBounds.yMin and obj1.contentBounds.yMax >= obj2.contentBounds.yMin local down = obj1.contentBounds.yMin> = obj2.contentBounds.yMin și obj1.contentBounds.yMin <= obj2.contentBounds.yMax return (left or right) and (up or down) end

Pasul 13: Obțineți poziția ultima poziție

Capturam capul șarpelui ultima poziție pentru a actualiza poziția părților, fiecare înlocuind coordonatele x și y ale celuilalt.

 function update () - Captureaza capul ultima pozitie, aceasta misca prima piesa adaugata locala lastX = head.x local lastY = head.y local xPos =  yPos = local

Pasul 14: mutați componente

Aceasta completează comportamentul explicat în pasul trecut.

 pentru i = 1, parts.numChildren do - Capturează poziția părților pentru a le mișca xPos [i] = părți [i] .x yPos [i] = părți [i] .y - ]] = .x = xPos [i] .x = xPos [i] .y = yPos [i-1] sfârșitul

Pasul 15: Verificați dacă jocul este depășit

Jocul se termină atunci când capul șarpei atinge o altă parte a șarpelui. Un sunet este jucat ca feedback.

 -- Jocul dacă capul atinge altă parte a șarpelui dacă (hitTestObjects (headHitArea, parts [i])) apoi imprimați [parts [i] .name) dacă [parts [i] .name == '1' ') altfel timer.cancel (timerSrc) timerSrc = zero audio.play (gameOver) end end

Pasul 16: mutați capul

Aceste linii deplasează capul în funcție de direcția stabilită de movePlayer funcția creată în etapa 11.

 -- (Dir == 'up') apoi head.y = head.y - mConst headHitArea.x = headGFX.x headHitArea.y = headGFX.y - 7 elseif (dir == 'stânga') apoi head.x = head.x - mConst capHitArea.x = headGFX.x - 8 headHitArea.y = headGFX.y elseif (dir == 'jos') apoi head.y = head.y + mConst headHitArea.x = headGFX. x headHitArea.y = headGFX.y + 8 altfel (dir == 'dreapta'), apoi head.x = head.x + mConst headHitArea.x = headGFX.x + 7 headHitArea.y = endGFGF.y sfârșit

Pasul 17: Coliziunea Apple-Head

Câteva acțiuni apar atunci când șarpele mănâncă un măr pe care îl vom trece prin următorii pași.

Mai întâi eliminăm mărul.

 -- Detectați coliziunea pentru un jucător de mere pentru i = 1, apples.numCopii fac dacă (hitTestObjects (cap, mere [i])) apoi - Eliminați Apple display.remove (mere [i])

Pasul 18: Scorul de actualizare

Apoi, actualizăm câmpul de text al scorului și reda un sunet care indică faptul că mărul a fost mâncat.

 -- Adăugați scor score.text = score.text + tostring (10) scor: setReferencePoint (display.TopLeftReferencePoint) score.x = 74 audio.play (appleGrab)

Pasul 19: Adăugați o parte a șarpelui

Apoi, o nouă parte este adăugată la șarpe. Poziția sa este calculată de ultima parte adăugată (prima dată este capul) și apoi se adaugă la un grup.

 -- Adăugați o parte locală a șarpelui = display.newImage ('bodyPart.png') dacă (dir == 'sus') apoi part.x = lastPart.x part.y = lastPart.y + mConst elseif (dir == ' ) apoi part.x = lastPart.x + mConst part.y = lastPart.y elseif (dir == 'jos') apoi part.x = lastPart.x part.y = lastPart.y - mConst elseif (dir == ' dreapta) apoi part.x = lastPart.x - mConst part.y = lastPart.y sfarsit curent = curent + 1 part.name = tostring (curent) lastPart = parti componente:

Pasul 20: Apple nou

În cele din urmă, creăm un nou măr și îl plasăm într-o poziție aleatoare în scenă.

 -- Adăugați noul Apple local random = 25 + math.floor (math.random () * 258) local apple = display.newImage ('apple.png', randomX, randomY) apples = display.newGrupul (măr) sfârșitul final

Pasul 21: Limitele ecranului

Acest lucru face ca șarpele să apară pe cealaltă parte a scenei.

 -- Ecranul limitează dacă (cap .x < 0) then head.x = display.contentWidth - mConst elseif(head.x > display.contentWidth), apoi head.x = 0 end - vertical dacă (head.y < 0) then head.y = display.contentHeight - mConst elseif(head.y > display.contentHeight), apoi capul.y = 0 sfârșitul final

Pasul 22: Apelați funcția principală

Pentru a începe jocul, Principal funcția trebuie să fie numită. Cu codul de mai sus, vom face asta aici:

 Principal()

Pasul 23: Ecran de încărcare

Fișierul Default.png este o imagine care va fi afișată chiar când porniți aplicația în timp ce iOS încarcă datele de bază pentru a afișa ecranul principal. Adăugați această imagine în folderul sursă al proiectului, acesta va fi adăugat automat de către compilatorul Corona.


Pasul 24: Pictogramă

Utilizând grafica pe care ați creat-o înainte de a crea acum o pictogramă frumoasă și bună. Dimensiunea pictogramei pentru pictograma non-retina iPhone este de 57x57px, dar versiunea retinei este 114x114px și magazinul iTunes necesită o versiune de 512x512px. Vă sugerăm să creați prima versiune 512x512 și apoi să scalați pentru alte dimensiuni.

Nu trebuie să aibă colțurile rotunjite sau strălucirea transparentă, iTunes și iPhone-ul vor face asta pentru tine.


Pasul 25: Testarea în simulator

E timpul să facem testul final. Deschideți Simulatorul Corona, navigați în dosarul proiectului, apoi faceți clic pe Deschidere. Dacă totul funcționează așa cum era de așteptat, sunteți gata pentru ultimul pas!


Pasul 26: Construiți

În Simulatorul Corona mergeți la Fișier> Construiți și selectați dispozitivul țintă. Completați datele solicitate și faceți clic pe construi. Așteptați câteva secunde și aplicația dvs. va fi gata pentru testarea dispozitivului și / sau trimiterea pentru distribuire!


Concluzie

Experimentați cu rezultatul final și încercați să faceți versiunea personalizată a jocului!

Sper că ți-a plăcut această serie de tutori și ți se pare util. Mulțumesc că ați citit!

Cod