Welkom bij de laatste zelfstudie in onze Brick Breaker-gameserie! In deze zelfstudie behandelen we de logica voor de resterende botsingen, controleren op win- en verliesstatussen, wijzigingsniveaus en meer.
Lees zeker deel 1 en deel 2 van deze serie om de code in deze tutorial volledig te begrijpen.
Wanneer de bal botst met een steen, zullen we dezelfde techniek gebruiken als toegepast op de peddel om de kant te bepalen die de bal zal volgen:
functie removeBrick (e) - Controleer welke kant van de steen de bal raakt, links, rechts if (e.other.name == 'brick' en (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)) then xSpeed = 5 end end
Wanneer een steen wordt geraakt, gebruiken we de andere parameter van de botsing evenement om erachter te komen welke baksteen is geraakt en verwijder deze vervolgens uit zowel het podium als de stenengroep:
-- Bounce, Remove if (e.other.name == 'brick') en vervolgens ySpeed = ySpeed * -1 e.other: removeSelf () e.other = nil bricks.numChildren = bricks.numChildren - 1
Elke baksteenhit voegt 100 punten toe aan de score. De score wordt uit de scoreconstante gehaald en als tekst aan de huidige score toegevoegd.
score = score + 1
score Num.text = score * SCORE_CONST
scoreNum: setReferencePoint (display.CenterLeftReferencePoint)
score Num.x = 54
einde
Deze code controleert of er nog stenen over zijn op het podium en geeft een bericht "you won" weer als dit niet het geval is:
if (bricks.numChildren < 0) then alert(' You Win!', ' Next Level ?') gameEvent = 'win' end end
De balsnelheid wordt bepaald door de xSpeed en ySpeed variabelen. Wanneer de bijwerken functie wordt uitgevoerd, begint de bal te bewegen met behulp van deze waarden voor plaatsing op elk frame.
functie-update (e) - Balverplaatsing ball.x = bal.x + xSpeed ball.y = bal.y + ySpeed
Deze code controleert op muurbotsingen met de bal en reageert door de bal in de tegenovergestelde richting te sturen wanneer nodig:
if (ball.x < 0) then ball.x = ball.x + 3 xSpeed = -xSpeed end--Left if((ball.x + ball.width) > display.contentWidth) dan ball.x = ball.x - 3 xSpeed = -xSpeed end - Right if (ball.y < 0) then ySpeed = -ySpeed end--Up
Een if-statement wordt gebruikt om te controleren of de peddel de bal mist. Als dit waar is, wordt een waarschuwing weergegeven waarin de gebruiker wordt gevraagd of ze het opnieuw willen proberen.
if (ball.y + ball.height> paddle.y + paddle.height) en vervolgens alert ('You Lose', 'Play Again?') gameEvent = 'lose' end-down / lose
Het waarschuwingsscherm toont de spelerinformatie over de status van het spel. Het wordt getoond wanneer een win / verlies-evenement wordt bereikt.
Twee parameters worden gebruikt in deze functie:
functie waarschuwing (t, m) gameListeners ('remove') alertBg = display.newImage ('alertBg.png') box = display.newImage ('alertBox.png', 90, 202) transition.from (box, time = 300, xScale = 0,5, yScale = 0,5, transition = 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 box: addEventListener ('tik op', herstart) alertScreen = display.newGroup () alertScreen: insert (alertBg) alertScreen: insert (box) alertScreen: insert ( titleTF) alertScreen: insert (msgTF) einde
De volgende functie controleert de spelstatus (winnen, verliezen, afgewerkt) en voert de bijbehorende actie uit:
functie opnieuw opstarten (e) if (gameEvent == 'win' en table.maxn (niveaus)> currentLevel) dan currentLevel = currentLevel + 1 changeLevel (levels [currentLevel]) - next level levelNum.text = tostring (currentLevel) elseif ( gameEvent == 'win' en table.maxn (niveaus) <= 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
Deze functie verandert het niveau wanneer nodig:
function changeLevel (level) - Clear Level Bricks bricks: removeSelf () bricks.numChildren = 0 bricks = display.newGroup () - Remove Alert box: removeEventListener ('tap', restart) alertScreen: removeSelf () alertScreen = nil - - Reset Bal en Paddle positie ball.x = (display.contentWidth * 0.5) - (ball.width * 0.5) ball.y = (paddle.y - paddle.height) - (ball.height * 0.5) -2 paddle. x = display.contentWidth * 0.5 - Redraw Bricks buildLevel (level) - Start background: addEventListener ('tap', startGame) end
Om het spel in eerste instantie te starten, is de Hoofd functie moet worden gebeld. Met de bovenstaande code op zijn plaats, doen we dat hier:
Hoofd()
Het bestand Default.png is een afbeelding die juist wordt weergegeven wanneer u de toepassing start terwijl de iOS de basisgegevens laadt om het hoofdscherm weer te geven. Voeg deze afbeelding toe aan uw projectbronmap en deze wordt automatisch toegevoegd door de Corona-compileermachine.
Met behulp van de afbeeldingen die u eerder hebt gemaakt, kunt u nu een mooi en goed uitziend pictogram maken. De pictogramgrootte voor het niet-retina-iPhone-pictogram is 57x57px, maar de netvliesversie is 114x114px en de iTunes-winkel heeft een 512x512px-versie nodig. Ik stel voor eerst de 512x512-versie te maken en vervolgens de overige formaten te verkleinen.
Het hoeft niet de afgeronde hoeken of de transparante schittering te hebben, iTunes en de iPhone zullen dat voor je doen.
Het is tijd om de laatste test te doen. Open de Corona Simulator, blader naar uw projectmap en klik vervolgens op Openen. Als alles werkt zoals verwacht, bent u klaar voor de laatste stap!
Ga in de Corona Simulator naar Bestand> Build en selecteer uw doelapparaat. Vul de vereiste gegevens in en klik op bouwen. Wacht een paar seconden en uw app is gereed voor apparaattesten en / of verzending voor distributie!
Het eindresultaat is een aanpasbaar en vermakelijk spel. Probeer uw eigen aangepaste afbeeldingen en niveaus toe te voegen om dingen op te fleuren!
Ik hoop dat je deze tutorialserie leuk vond en het nuttig vond. Bedankt voor het lezen!