Lag et Brick Breaker-spill med Corona SDK Game Controls

I denne opplæringsserien bygger vi et Brick Breaker-spill fra bunnen av med Corona SDK. Målet med dette spillet er å kontrollere en ponglignende padle for å banke en ball mot en stabel med murstein inntil de alle går i stykker.


Hvor vi forlot?

Hvis du ikke allerede har gjort det, vær så snill å lese del 1 av denne serien for å forstå koden i denne opplæringen.

Trinn 16: Funksjonserklæringer

Å ha erklært et flerdimensjonalt bord for å holde nivåene våre i trinn 15, erklærer nå alle funksjonene som skal brukes i denne appen:

 lokal addMenuScreen =  lokal tweenMS =  lokal hideAbout =  lokal rmvAbout =  lokal addGameScreen =  lokal buildLevel =  lokal movePaddle =  lokal gameListeners =  lokal startGame =  lokal oppdatering =  lokal avvisning =  lokal fjernelseBrick =  lokalvarsling =  lokal restart =  lokal endring = 

Trinn 17: Konstruktorkode

Opprett nå Hoved(), Den første funksjonen som vil bli kalt når spillet starter:

 lokal funksjon Hoved () addMenuScreen () slutten

Trinn 18: Legg til menyskjerm

Den neste kodestykket legger til menyskjermbildet til scenen og lagrer dem i menuScreen gruppe:

 funksjon addMenuScreen () menuScreen = display.newGroup () mScreen = display.newImage ('mScreen.png') startB = display.newImage ('startB.png') startB.name = 'startB' omB = display.newImage ('omB .png ') omB.name =' omB 'menyskjerm: sett inn (mScreen) startB.x = 160 startB.y = 260 menyskjerm: Sett inn (startB) omB.x = 160 omB.y = 310 menyScreen: Sett inn (ca.B)

Trinn 19: Knappelyttere

Lyttere legges til knappene for å utføre tweenMS funksjon når du trykker på:

 startB: addEventListener ('tap', tweenMS) omB: addEventListener ('tap', tweenMS) avslutter

Trinn 20: Ring om skjerm

Denne funksjonen kontrollerer hvilken knapp som ble tappet og viser tilsvarende visning:

 funksjon tweenMS: trykk (e) hvis (e.target.name == 'startB') deretter - Start Game transition.to (menyScreen, time = 300, y = -menuScreen.height, transition = easing.outExpo, onComplete = addGameScreen) ellers - Ring om skjerm om skjerm = display.newImage ('aboutScreen.png') transition.from (omScreen, time = 300, x = menuScreen.contentWidth, transition = easing.outExpo) omScreen: addEventListener trykk ', skjul om)

Trinn 21: Skjul menyknapper

Disse linjene, konklusjonen av tweenMS Funger fra oven, skjul menyskjermknappene for å unngå uønskede kraner:

 startB.isVisible = false; aboutB.isVisible = false; slutten

Trinn 23: Fjern om skjermbildet

Den neste funksjonen tweens om skjermen offstage og fjerner den:

 funksjon hideAbout: trykk (e) overgang.to (omScreen, time = 300, x = omScreen.width * 2, overgang = easing.outExpo, onComplete = rmvAbout) sluttfunksjon rmvAbout () omScreen: removeSelf () - Aktiver Menyknapper startB.isVisible = true; aboutB.isVisible = true; slutt

Trinn 24: Destroy menyskjermen

Når brukeren tapper startknappen, begynner vi å lage skjermbildet. Det første du må gjøre er å ødelegge menyskjermbildet:

 funksjon addGameScreen () - Destroy Menu Screen menuScreen: removeSelf () menuScreen = null

Trinn 25: Legg til skjermen

Deretter legger vi til padle og ballgrafikk:

 -- Legg spilleskjermen paddle = display.newImage ('paddle.png') ball = display.newImage ('ball.png') paddle.x = 160 paddle.y = 460 ball.x = 160 ball.y = 446 paddle.name = 'padle' ball.name = 'ball'

Trinn 26: Ring bygge nivåfunksjon

Da bygger vi nivået. Denne funksjonen er fullstendig forklart senere i tut:

 buildLevel (nivå [1])

Trinn 27: Scores & Levels Text

Den siste grafikken du vil legge til er for poengsummen og nivået på teksten:

 scoreText = display.newText ('Score:', 5, 2, 'akashi', 14) scoreText: setTextColor (254, 203, 50) scoreNum = display.newText ('0', 54, 2, 'akashi', 14 ) scoreNum: setTextColor (254,203,50) levelText = display.newText ('Nivå:', 260, 2, 'akashi', 14) levelText: setTextColor (254, 203, 50) levelNum = display.newText ('1' 307, 2, 'akashi', 14) levelNum: setTextColor (254.203,50)

Trinn 28: Start Lytter

En lytter legges til bakgrunnen. Denne lytteren starter spillet når bakgrunnen er tappet:

 bakgrunn: addEventListener ('tap', startGame) slutten

Trinn 29: Flytt Padle

Padlen vil bli styrt ved hjelp av enhetens akselerometer. Dataene vil bli oppnådd ved hjelp av e.xGravity og sendt til padleens x-egenskap.

 Funksjon MovePaddle: akselerometer (e) - Accelerometer Movement paddle.x = display.contentCenterX + (display.contentCenterX * (e.xGravity * 3))

Trinn 30: Paddle Border Collision

For å stoppe padlen fra å forlate scenen, oppretter vi usynlige grenser på sidene av skjermen:

 hvis ((paddle.x - paddle.width * 0.5) < 0) then paddle.x = paddle.width * 0.5 elseif((paddle.x + paddle.width * 0.5) > display.contentWidth) så paddle.x = display.contentWidth - paddle.width * 0,5 ende ende

Trinn 31: Bygningsnivåfunksjon

Nivåene vil bli bygget av denne funksjonen.

Den bruker en parameter for å oppnå nivået som skal bygges, beregner størrelsen og kjører en dobbel for sløyfe, en for høyden og en for bredden. Deretter oppretter det en ny Brick-forekomst som er plassert i henhold til bredde, høyde og tall tilsvarende Jeg og j. Teglsten er erklært som statisk i fysikkmotoren da det ikke vil oppdage kollisjonen, vil det bli håndtert av ball som er den eneste dynamisk fysikk type.

Til slutt blir mursten lagt til mursteingruppen for å få tilgang til den utenfor denne funksjonen.

 funksjon buildLevel (nivå) - Nivålengde, høyde lokale len = table.maxn (nivå) murstein: toFront () for i = 1, len gjør for j = 1, W_LEN gjør hvis (nivå [i] [j] == 1) deretter lokal murstein = display.newImage ('brick.png') brick.name = 'murstein' brick.x = BRICK_W * j - OFFSET brick.y = BRICK_H * jeg fysikk.addBody (murstein, tetthet = 1, friksjon = 0, sprette = 0) brick.bodyType = 'statisk' murstein.insert (murstein, murstein) endeendens ende ende

Trinn 32: Spillelyttere

Denne funksjonen legger til eller fjerner lytterne. Den bruker en parameter for å avgjøre om lytterne skal legges til eller fjernes. Vær oppmerksom på at enkelte linjer er kommentert, da funksjonene til å håndtere dem ennå ikke er opprettet.

 Funksjon spillListere (handling) hvis (handling == 'legg til') så Runtime: addEventListener ('accelerometer', movePaddle) --Runtime: addEventListener ('enterFrame', oppdatering) padle: addEventListener ('kollisjon' : addEventListener ('kollisjon', removeBrick) ellers Runtime: removeEventListener ('accelerometer', movePaddle) --Runtime: removeEventListener ('enterFrame', oppdatering) padle: removeEventListener ('kollisjon', sprette) --ball: removeEventListener ', removeBrick) slutten

Trinn 33: Start spillet

I denne funksjonen kaller vi gameListeners funksjon som vil starte bevegelses- og spillkontrollene:

 funksjon startGame: trykk (e) bakgrunn: removeEventListener ('tap', startGame) gameListeners ('add') - Fysikk fysikk.addBody (padle, tetthet = 1, friksjon = 0, sprette = 0) physics.addBody ball, tetthet = 1, friksjon = 0, sprett = 0) paddle.bodyType = 'statisk' ende

Trinn 34: Padle-Ball-kollisjoner

Når ballen treffer padlen, vil den ySpeed er satt til negativ for å få ballen til å gå opp. Vi sjekker også inn hvilken side av padlen ballen har slått for å velge siden der den vil bevege seg neste. Kollisjonen oppdages av kollisjon hendelse lytter la til i gameListeners funksjon:

 funksjonstopp (e) ySpeed ​​= -5 - Paddle Collision, kontroller hvilken side av padlen ballen slår til, venstre, høyre hvis ((ball.x + ball.width * 0.5) < paddle.x) then xSpeed = -5 elseif((ball.x + ball.width * 0.5) >= paddle.x) deretter xSpeed ​​= 5 ende - Kjør kode Main ()

Neste i serien

I neste og siste del av serien håndterer vi murstein og veggkollisjoner, poeng, nivåer og de siste trinnene for å ta forut for utgivelsen som app testing, lage en startskjerm, legge til et ikon og til slutt bygge opp app. Hold deg oppdatert på den siste delen!