Î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!
Asigurați-vă că verificați partea 1 din seria să înțeleagă pe deplin și să se pregătească pentru acest tutorial.
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
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
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
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 =
Acest cod plasează fundalul jocului în etapă.
-- [Adăugați GFX] - Joc Bg gameBg = display.newImage ('gameBg.png')
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 =
Această linie adaugă scorul de text:
-- Scor text scor = display.newText ('0', 74, 3, native.systemFontBold, 15) scor: setTextColor (252, 202, 1)
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
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
Această funcție adaugă ascultătorii necesari pentru a porni logica jocului.
('tap', movePlayer) jos: addEventListener ('tap', movePlayer) la dreapta: addEventListener
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
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
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
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
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
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
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])
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)
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:
Î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
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
Pentru a începe jocul, Principal funcția trebuie să fie numită. Cu codul de mai sus, vom face asta aici:
Principal()
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.
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.
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!
Î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!
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!