Lag et Brick Breaker-spill med Corona SDK Kollisjonsdeteksjon

Velkommen til den endelige opplæringen i vår Brick Breaker-spillserie! I denne opplæringen håndterer vi logikken for de gjenværende kollisjonene, sjekk for vinn- og tapstilstander, endre nivåer og mer.


Hvor vi forlot?

Husk å lese del 1 og del 2 av denne serien for å fullt ut forstå koden som presenteres i denne opplæringen.

Trinn 35: Oppdag Brick Collisions

Når ballen kolliderer med en murstein, bruker vi den samme teknikken som brukes på padlen for å bestemme siden ballen skal følge:

 funksjon removeBrick (e) - Sjekk hvilken side av mursteinen ballen treffer, venstre, høyre hvis (e.other.name == 'brick' og (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)) deretter xSpeed ​​= 5 endeend

Trinn 37: Fjern murstein

Når en murstein er rammet, bruker vi den andre parameteren til kollisjon arrangement for å finne ut nøyaktig hvilken mur som ble truffet, og fjern den fra både scenen og teglgruppen:

 -- Bounce, Fjern hvis (e.other.name == 'brick') så ySpeed ​​= ySpeed ​​* -1 e.other: removeSelf () e.other = nil bricks.numChildren = bricks.numChildren - 1

Trinn 38: Legg til poeng

Hver murstein hit vil legge til 100 poeng til poengsummen. Poengsummen vil bli tatt fra poengsummen konstant og lagt til nåværende score som tekst.

 score = score + 1
scoreNum.text = score * SCORE_CONST
scoreNum: setReferencePoint (display.CenterLeftReferencePoint)
scoreNum.x = 54
slutt

Trinn 39: Kontroller murstein

Denne koden sjekker om det er flere murstein igjen på scenen og viser en "du vant" melding hvis ikke:

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

Trinn 40: Ballbevegelse

Ballhastigheten bestemmes av xSpeed og ySpeed variabler. Når Oppdater Funksjonen utføres, begynner ballen å bevege seg ved å bruke disse verdiene for plassering på hver ramme.

 funksjon oppdatering (e) - Ball bevegelse ball.x = ball.x + xSpeed ​​ball.y = ball.y + ySpeed

Trinn 41: Veggkollisjon

Denne koden kontrollerer veggkollisjoner med ballen, og svarer ved å sende ballen i motsatt retning når det er nødvendig:

 if (ball.x < 0) then ball.x = ball.x + 3 xSpeed = -xSpeed end--Left if((ball.x + ball.width) > display.contentWidth) da ball.x = ball.x - 3 xSpeed ​​= -xSpeed-end - Høyre hvis (ball.y < 0) then ySpeed = -ySpeed end--Up

Trinn 42: Tapstilstand

En if-setning brukes til å sjekke om padleen savner ballen. Hvis det er sant, vises et varsel som spør brukeren om de vil prøve på nytt.

 hvis (ball.y + ball.height> paddle.y + paddle.height) så varslet ('You Lose', 'Play Again?') gameEvent = 'lose' end-down / lose

Trinn 43: Spillstatusmelding

Varslingsskjermbildet viser spillerens informasjon om statusen til spillet. Det vises når en gevinst / tapshendelse er nådd.

To parametere brukes i denne funksjonen:

  • t: Varsel tittelen
  • m: En kort melding
 funksjonalarm (t, m) gameListeners ('fjern') alertBg = display.newImage ('alertBg.png') boks = display.newImage ('alertBox.png', 90, 202) transition.from (boks, time = 300, xScale = 0.5, yScale = 0.5, overgang = easing.outExpo) titleTF = display.newText (t, 0, 0, 'akashi', 19) titleTF: setTextColor (254.203,50) titleTF: setReferencePoint (display.CenterReferencePoint ) titleTF.x = display.contentCenterX titleTF.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 = display.contentCenterY + 15-boks: addEventListener ('trykk', start på nytt) alertScreen = display.newGroup () alertScreen: sett inn (alertBg) alertScreen: insert (box) alertScreen: insert titleTF) alertScreen: sett inn (msgTF) slutten

Trinn 44: Start på nytt

Den neste funksjonen kontrollerer spillstatusen (seier, tap, ferdig) og utfører tilsvarende handling:

 funksjonstart (e) hvis (gameEvent == 'vinn' og table.maxn (nivå)> currentLevel) then currentLevel = currentLevel + 1 changeLevel (nivåer [currentLevel]) - neste nivå levelNum.text = tostring (currentLevel) elseif gameEvent == 'win' og table.maxn (nivåer) <= 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

Trinn 45: Endre nivå

Denne funksjonen endrer oppdateringen til nivået når det er nødvendig:

 funksjonsendringLevel (nivå) - Clear Level Bricks teglsten: removeSelf () bricks.numChildren = 0 bricks = display.newGroup () - Fjern Alert-boksen: removeEventListener ('trykk', start) alertScreen: removeSelf () alertScreen = nil - - Tilbakestill ball og padle posisjon ball.x = (display.contentWidth * 0.5) - (ball.width * 0.5) ball.y = (paddle.y - paddle.height) - (ball.height * 0,5) -2 padle. x = display.contentWidth * 0.5 - Redraw Bricks buildLevel (nivå) - Start bakgrunn: addEventListener ('tap', startGame) slutten

Trinn 46: Ring hovedfunksjon

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

 Hoved()

Trinn 47: Lag opplastingsskjermbildet

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 48: 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 49: Testing i simulatoren

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 50: 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

Det endelige resultatet er et tilpassbart og underholdende spill. Prøv å legge til din egen tilpassede grafikk og nivåer for å spice opp ting!

Jeg håper du likte denne opplæringsserien og finner den nyttig. Takk for at du leser!