Creați un joc Pinball adăugați interacțiunea

Aceasta este a doua tranșă în tutorialul nostru pentru jocul Pinball de la Corona SDK. În tutorialul de astăzi, vom adăuga la interfața noastră și apoi vom codifica interacțiunea jocului. Citește mai departe!


Unde am plecat ...

Asigurați-vă că verificați partea 1 a seriei pentru a înțelege pe deplin și pentru a vă pregăti pentru acest tutorial.


Pasul 1: Afișați vizualizarea jocului

Cand start butonul este atins, vizualizarea titlului este completat și eliminat, dezvăluind vizualizarea jocului. Există multe părți implicate în această viziune, așa că le vom împărți în următorii pași.

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

Pasul 2: Adăugați peretele stâng

Aici plasăm peretele stâng, amintiți-vă că a fost împărțit în părți pentru a aplica fizica mai târziu.

 -- Piesele părții stângă l1 = display.newImage ('l1.png') l2 = display.newImage ('l2.png', 0, 214) l3 = display.newImage ('l3.png', 0, 273) .newImage ('l4.png', 0, 387)

Pasul 3: Adăugați peretele drept

Acest cod plasează peretele drept utilizând aceeași metodă.

 -- Părți din perete dreapta r1 = display.newImage ('r1.png', 238, 0) r2 = display.newImage ('r2.png', 274, 214) r3 = display.newImage ) r4 = display.newImage ('r4.png', 195, 387)

Pasul 4: Ball & HitLines

Adăugați mingea și HitLines cu următorul cod:

 ball = display.newImage ('ball.png', display.contentWidth * 0.5, 0) hitLine1 = display.newImage ('hitLine.png', 70, 28) hitLine2 = 28)

Pasul 5: Bilele lovite

Obiectivele sunt adăugate folosind următoarele linii:

 -- HitBall3 = display.newImage ('hitBall.png', 187, 236) hitBall2 = display.newImage ('hitBall.png', 130, 236) hitBall1.name = 'hBall' hitBall2.name = 'hBall' hitBall3.name = 'hBall'

Pasul 6: Pălării

Apoi adăugăm padelele și le dăm un nume care să le folosească mai târziu.

 pLeft = display.newImage ('paddleL.png', 74, 425) pRight = display.newImage ('paddleR.png', 183, 425) pLeft.name = 'leftPaddle' pRight.name =

Pasul 7: Butoane cu palete

Aceste butoane vor controla padelele, adăugându-le folosind acest cod:

 lBtn = display.newImage ('lBtn.png', 20, 425) rBtn = display.newImage ('rBtn.png', 260, 425)

Pasul 8: Scorarea textului

În cele din urmă, adăugăm câmpul de text pentru scoruri.

 -- Scor TextField scor = display.newText ('0', 2, 0, 'Marker Felt', 14) scor: setTextColor (255, 206, 0)

Pasul 9: Corpurile fizicii pereților

Probabil vă întrebați de ce am adăugat pereții în părți. Deoarece facem coliziuni perfecte pixel pe ele, nu putem folosi doar addBody (deoarece aceasta va adăuga și o casetă care acoperă și canalul alfa), în schimb folosim formă parametru pentru a defini un poligon pentru imagine.

De ce nu un singur poligon?

Parametrul de formă acceptă numai convex forme și un maxim de 8 laturi, peretele nostru nu este nici unul, așa că l-am împărțit în bucăți.

 -- Partea stângă a părților fizice.addBody (l1, 'static', shape = -40, -107, -11, -107, 40, 70, 3, 106, -41, 106 fizics.addBody "static", shape = -23, -30, 22, -30, 22, 8, 6, 29, -23, 29) physics.addBody (13, 'static' , -56, 14, -56, 14, 56, -14, 56)) physics.addBody (14, 'static', shape = -62, -46, -33, - 10, -107, 39, -107, 40, 106, -5, 106, -41, 70 - Părțile drepte ale părții fizice.addBody (r1, ) physics.addBody (r2, 'static', shape = -22, -30, 22, -30, 22, 29, -6, 29, -23, 9 static ', shape = -14, -56, 14, -56, 14, 56, -14, 56) fizics.addBody (r4, -46, 61, 45, -62, 45)

Pasul 10: Bile, zone de lovituri, & Pălării

Metode similare sunt utilizate cu celelalte forme, cu excepția cercurilor care utilizează rază parametru.

 fizice.addBody (minge, 'dinamic', radius = 8, bounce = 0.4) fizics.addBody (hitLine1, 'static', shape = -20, -42, -15, -49, -6, - 46, 18, 39, 15, 44, 5, 44,) fizics.addBody (hitLine2, 'static', shape = -20, -42, -15, -49, -6, -46,18 , 39, 15, 44, 5, 44,) fizics.addBody (hitBall1, 'static', radius = 15) physics.addBody (hitBall2, 'static', radius = hitBall3, 'static', radius = 15) fizics.addBody (pRight, 'static', shape = 33, 11, 27, -12, 32, 1) ', forma = -33, 1, -28, -12, 32, 11)

Pasul 11: Zidul de sus

O linie simplă este adăugată în partea de sus a ecranului ca un perete pentru a sări mingea.

 -- Top Wall local topWall = display.newLine (display.contentWidth * 0.5, -1, display.contentWidth * 2, -1) fizice.addBody (topWall, 'static')

Pasul 12: ascultători de jocuri

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

 ('touch', movePaddle) rBtn: addEventListener ('touch', movePaddle) minge: addEventListener ('collision', onCollision) Runtime: addEventListener (' ('touch', movePaddle) rBtn: removeEventListener ('touch', movePaddle) minge: removeEventListener ('collision', onCollision) Runtime: endEventListener

Pasul 12: Rotiți paleta

Butoanele de pe ecran vor declanșa rotirea paletelor. Acest cod se ocupă de acest lucru.

 funcția movePaddle (e) dacă (e.phase == 'a început' și e.target.name == 'stânga'), apoi pLeft.rotation = -40 elseif (e.phase == 'started' și e.target.name == 'dreapta'), apoi pRight.ro = 40 sfarsit

Pasul 14: Reveniți la rotația originală

Rotirea va reveni la starea inițială atunci când butonul nu mai este apăsat.

 dacă (e.phase == 'terminat'), atunci pLeft.ro = 0 pRight.ro = 0 sfârșitul final

Pasul 15: Trageți

Mingea va fi împușcată când apare o coliziune cu paleta, dar numai dacă rotirea paletei este activă. Acest lucru evită împușcarea mingii atunci când butoanele nu sunt apăsate.

 (e.phase == 'started' și e.other.name == 'leftPaddle' și e.other.rotation == -40) apoi minge: applyLinearImpulse (0.05, 0.05, minge .y, ball.y) elseif (e.phase == 'a început' și e.other.name == 'rightPaddle' și e.other.rotation == 40) apoi minge: applyLinearImpulse (0.05, 0.05, ball.y , ball.y) sfârșit

Pasul 16: Creșteți scorul

Scorul va crește după ce apare o coliziune cu orice lovitură.

 dacă (e.phase == 'terminat' și e.other.name == 'hBall'), apoi scorul.text = tostring (tonumber (score.text) + 100) scorul: setReferencePoint (display.TopLeftReferencePoint) score.x = 2 audio.play (clopot) sfârșitul final

Pasul 17: Verificați pierderea

Acest cod verifică dacă mingea cade între spațiul dintre palete și resetează mingea dacă este adevărată.

 function update () - Verificati daca bila loveste partea de jos daca (ball.y> display.contentHeight) apoi ball.y = 0 audio.play (buzz) end end

Pasul 18: Apelați funcția principală

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

 Principal()

Pasul 19: Ecranul 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 20: Pictogramă

Folosind grafica pe care ați creat-o înainte, puteți crea acum o pictogramă frumoasă și bună. Dimensiunea pictogramei pentru pictograma non-retina iPhone este de 57x57px, dar versiunea retinei este 114x114px, iar magazinul iTunes necesită o versiune de 512x512px. Vă sugerăm să creați prima versiune 512x512 și apoi să scalați pentru alte dimensiuni. Pictograma nu are nevoie să aibă colțurile rotunjite sau strălucirea transparentă, iTunes și iPhone-ul vor face asta pentru tine.


Pasul 21: Testarea în simulator

E timpul să rulați 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 22: Construiți

În simulatorul Corona, du-te 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-a dat de ajutor. Mulțumesc că ați citit!

Cod