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.
Hvis du ikke allerede har gjort det, vær så snill å lese del 1 av denne serien for å forstå koden i denne opplæringen.
Å 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 =
Opprett nå Hoved()
, Den første funksjonen som vil bli kalt når spillet starter:
lokal funksjon Hoved () addMenuScreen () slutten
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)
Lyttere legges til knappene for å utføre tweenMS funksjon når du trykker på:
startB: addEventListener ('tap', tweenMS) omB: addEventListener ('tap', tweenMS) avslutter
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)
Disse linjene, konklusjonen av tweenMS
Funger fra oven, skjul menyskjermknappene for å unngå uønskede kraner:
startB.isVisible = false; aboutB.isVisible = false; slutten
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
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
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'
Da bygger vi nivået. Denne funksjonen er fullstendig forklart senere i tut:
buildLevel (nivå [1])
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)
En lytter legges til bakgrunnen. Denne lytteren starter spillet når bakgrunnen er tappet:
bakgrunn: addEventListener ('tap', startGame) slutten
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))
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
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
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
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
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 ()
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!