Creați un joc de întrerupere a caramizilor cu SDK Corona detectarea coliziunilor

Bine ați venit la ultimul tutorial din seria de jocuri Brick Breaker! În acest tutorial, vom gestiona logica pentru coliziuni rămase, vom verifica stările de câștig și pierderi, nivelurile de schimbare și multe altele.


Unde am plecat?

Asigurați-vă că ați citit partea 1 și partea 2 din această serie pentru a înțelege pe deplin codul prezentat în acest tutorial.

Pasul 35: Detectați coliziunea cărămizilor

Când mingea se ciocnește cu o cărămidă, vom folosi aceeași tehnică aplicată la paleta pentru a determina partea pe care o va urma mingea:

 funcția removeBrick (e) - Verificați care parte a cărămizii lovit mingea, stânga, dreapta dacă (e.other.name == "cărămidă" și (ball.x + ball.width * 0.5) < (e.other.x + e.other.width * 0.5)) then xSpeed = -5 elseif(e.other.name == 'brick' and (ball.x + ball.width * 0.5) >= (e.other.x + e.other.width * 0.5)), apoi xSpeed ​​= 5 sfârșitul final

Pasul 37: Îndepărtați caramida

Atunci când o cărămidă este lovită, vom folosi celălalt parametru al lui coliziune eveniment pentru a afla exact ce cărămidă a fost lovită și apoi scoateți-o din etapa și grupul de cărămizi:

 -- Bounce, Eliminați dacă (e.other.name == 'cărămidă') apoi ySpeed ​​= ySpeed ​​* -1 e.other: removeSelf () e.other = nil bricks.numChildren = bricks.numCopii - 1

Pasul 38: Adăugați un scor

Fiecare lovitură de cărămidă va adăuga 100 de puncte la scor. Scorul va fi luat de la constanta scorului și va fi adăugat scorului curent ca text.

 scor = scor + 1
scoreNum.text = scor * SCORE_CONST
scoreNum: setReferencePoint (display.CenterLeftReferencePoint)
scoreNum.x = 54
Sfârșit

Pasul 39: Verificați cărămizile

Acest cod verifică dacă mai sunt mai multe cărămizi de pe scenă și afișează mesajul "ați câștigat" dacă nu:

 în cazul în care (bricks.numChildren < 0) then alert(' You Win!', ' Next Level ?') gameEvent = 'win' end end

Pasul 40: Miscarea mingii

Viteza mingii este determinată de xSpeed și ySpeed variabile. Cand Actualizați funcția este executată, mingea începe să se deplaseze folosind aceste valori pentru plasarea pe fiecare cadru.

 actualizare funcție (e) - Mingea de mișcare ball.x = ball.x + xSpeed ​​ball.y = ball.y + ySpeed

Pasul 41: Coliziunea peretelui

Acest cod verifică coliziunea peretelui cu mingea și răspunde prin trimiterea mingii în direcția opusă atunci când este necesar:

 în cazul în care (ball.x < 0) then ball.x = ball.x + 3 xSpeed = -xSpeed end--Left if((ball.x + ball.width) > display.contentWidth) apoi ball.x = ball.x - 3xSpeed ​​= -xSpeed ​​sfârșit - dreapta dacă (ball.y < 0) then ySpeed = -ySpeed end--Up

Pasul 42: Condiția de pierdere

O instrucțiune if este utilizată pentru a verifica dacă paleta nu are mingea. Dacă este adevărat, este afișată o alertă prin care se solicită utilizatorului dacă dorește să încerce din nou.

 daca (ball.y + ball.height> paddle.y + paddle.height) atunci alerta ('You Lose', 'Joaca din nou?') gameEvent = 'pierde' end-down / lose

Pasul 43: Mesaj privind starea jocului

Ecranul Alert afișează informațiile despre starea jocului. Se afișează când se ajunge la un eveniment câștig / pierdere.

În această funcție se folosesc doi parametri:

  • T: Titlul de alertă
  • m: Un mesaj scurt
 ('alertBox.png', 90, 202) transition.from (caseta, time = time) =================================================================================================================== (T, 0, 0, 'akashi', 19) titleTF: setTextColor (254,203,50) titleTF: setReferencePoint (display.CenterReferencePoint ) titleTF.x = display.contentCenterX titluTF.y = display.contentCenterY - 15 msgTF = display.newText (m, 0, 0, 'akashi', 12) msgTF: setTextColor (254,203,50) msgTF: setReferencePoint (display.CenterReferencePoint ) msgTF.x = display.contentCenterX msgTF.y = caseta display.contentCenterY + 15: addEventListener ('tap', restart) alertScreen = display.newGrup () alertScreen: insert (alertBg) alertScreen: titleTF) alertScreen: inserare (msgTF) sfârșit

Pasul 44: reporniți

Următoarea funcție verifică starea jocului (câștigă, pierde, terminat) și efectuează acțiunea corespunzătoare:

 (e) dacă (gameEvent == 'win' și table.maxn (levels)> currentLevel), apoi currentLevel = currentLevel + 1 changeLevel (nivele [currentLevel]) - next levelNum.text = tostring (currentLevel) elseif gameEvent == 'win' și table.maxn (levels) <= currentLevel) then box:removeEventListener('tap', restart) alertScreen:removeSelf() alertScreen = nil alert(' Game Over', ' Congratulations!') gameEvent = 'finished' elseif(gameEvent == 'lose') then changeLevel(levels[currentLevel])--same level elseif(gameEvent == 'finished') then addMenuScreen() transition.from(menuScreen, time = 300, y = -menuScreen.height, transition = easing.outExpo) box:removeEventListener('tap', restart) alertScreen:removeSelf() alertScreen = nil currentLevel = scoreText:removeSelf() scoreText = nil scoreNum:removeSelf() scoreNum = nil levelText:removeSelf() levelText = nil levelNum:removeSelf() levelNum = nil ball:removeSelf() ball = nil paddle:removeSelf() paddle = nil score = 0 end end

Pasul 45: Nivel de schimbare

Această funcție modifică actualizarea nivelului atunci când este necesar:

 () - Ștergeți nivelul Caramida cărămizii: removeSelf () bricks.numChildren = 0 bricks = display.newGroup () - Eliminați caseta Alert: removeEventListener ('tap', restart) - Resetează poziția mingii și a paletei ball.x = (display.contentWidth * 0.5) - (minge.width * 0.5) ball.y = (paddle.y - paddle.height) - (minge.height * 0.5) -2 zbaturi. x = display.contentWidth * 0.5 - Redraw Cărămizi buildLevel (nivel) - Start fundal: addEventListener ('tap', startGame) sfârșit

Pasul 46: 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 47: Creați 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 48: 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 49: Testarea în simulator

Este timpul să faceț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 50: 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

Rezultatul final este un joc personalizabil și distractiv. Încercați să adăugați propriile grafice și niveluri personalizate, pentru a crea lucruri în ordine!

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

Cod