In deze tutorialserie bouwen we helemaal opnieuw een Brick Breaker-game met behulp van de Corona SDK. Het doel van dit spel is om een pong-achtige peddel te besturen om een bal tegen een stapel stenen te slaan totdat ze allemaal breken.
Als u dit nog niet hebt gedaan, lees dan alsjeblieft deel 1 van deze serie om de code in deze zelfstudie volledig te begrijpen.
Nadat we een multidimensionale tabel hebben gedeclareerd om onze niveaus in stap 15 te houden, verklaren we nu alle functies die in deze app zullen worden gebruikt:
local addMenuScreen = local tweenMS = local hideAbout = local rmvAbout = local addGameScreen = local buildLevel = local movePaddle = local gameListeners = local startGame = lokale update = local bounce = local removeBrick = local alert = local restart = local changeLevel =
Nu maken Hoofd()
, de eerste functie die wordt aangeroepen wanneer onze game start:
lokale functie Main () addMenuScreen () end
Het volgende codefragment voegt de afbeeldingen van het menuscherm toe en slaat ze op in de menuScreen groep:
function addMenuScreen () menuScreen = display.newGroup () mScreen = display.newImage ('mScreen.png') startB = display.newImage ('startB.png') startB.name = 'startB' aboutB = display.newImage ('aboutB .png ') aboutB.name =' aboutB 'menuScherm: insert (mScreen) startB.x = 160 startB.y = 260 menuScreen: insert (startB) aboutB.x = 160 aboutB.y = 310 menuScreen: insert (aboutB)
Luisteraars worden toegevoegd aan de knoppen om de tweenMS functie bij tikken:
startB: addEventListener ('tap', tweenMS) aboutB: addEventListener ('tap', tweenMS) einde
Deze functie controleert welke knop werd aangeraakt en geeft de bijbehorende weergave weer:
functie tweenMS: tik op (e) als (e.target.name == 'startB') en vervolgens - Start Game transition.to (menuScreen, time = 300, y = -menuScreen.height, transition = easing.outExpo, onComplete = addGameScreen) else - Call AboutScreen aboutScreen = display.newImage ('aboutScreen.png') transition.from (aboutScreen, time = 300, x = menuScreen.contentWidth, transition = easing.outExpo) aboutScreen: addEventListener (' tik op ', hideAbout)
Deze lijnen, de conclusie van de tweenMS
functie van boven, verberg de knoppen op het menuscherm om ongewenste tikken te voorkomen:
startB.isVisible = false; aboutB.isVisible = false; einde
De volgende functie tweens het ongeveer scherm buiten het podium en verwijdert het:
functie hideOver: tik op (e) transition.to (aboutScreen, time = 300, x = aboutScreen.width * 2, transition = easing.outExpo, onComplete = rmvAbout) end function rmvAbout () aboutScreen: removeSelf () - Enable Menuknoppen startB.isVisible = true; aboutB.isVisible = true; einde
Wanneer de gebruiker op de startknop tikt, beginnen we met het maken van het spelscherm. Het eerste dat u moet doen is het menuscherm vernietigen:
functie addGameScreen () - Menu Menu Vernietigen Scherm: removeSelf () menuScreen = nihil
Vervolgens voegen we de afbeelding van de paddle en de bal toe:
-- Spelscherm toevoegen paddle = display.newImage ('paddle.png') ball = display.newImage ('ball.png') paddle.x = 160 paddle.y = 460 ball.x = 160 ball.y = 446 paddle.name = 'paddle' ball.name = 'ball'
Dan bouwen we het niveau. Deze functie wordt later in de tut volledig uitgelegd:
buildLevel (levels [1])
De laatste grafische elementen die moeten worden toegevoegd, zijn voor de tekst score en niveaus:
scoreText = display.newText ('Score:', 5, 2, 'akashi', 14) scoreTekst: setTextColor (254, 203, 50) score Num = display.newText ('0', 54, 2, 'akashi', 14 ) scoreNum: setTextColor (254,203,50) levelText = display.newText ('Level:', 260, 2, 'akashi', 14) levelText: setTextColor (254, 203, 50) levelNum = display.newText ('1', 307, 2, 'akashi', 14) levelNum: setTextColor (254,203,50)
Er wordt een luisteraar aan de achtergrond toegevoegd. Deze luisteraar start het spel wanneer de achtergrond wordt aangeboord:
achtergrond: addEventListener ('tik op', startspel) einde
De paddle wordt bestuurd met behulp van de versnellingsmeter van het apparaat. De gegevens worden verkregen met behulp van e.xGravity en doorgegeven aan de x-eigenschap van de paddle.
functie movePaddle: accelerometer (e) - Accelerometer Beweging paddle.x = display.contentCenterX + (display.contentCenterX * (e.xGravity * 3))
Om te voorkomen dat de paddle het podium verlaat, creëren we onzichtbare randen aan de zijkanten van het scherm:
if ((paddle.x - paddle.width * 0.5) < 0) then paddle.x = paddle.width * 0.5 elseif((paddle.x + paddle.width * 0.5) > display.contentWidth) en dan paddle.x = display.contentWidth - paddle.width * 0.5 end end
De niveaus zullen door deze functie worden gebouwd.
Het gebruikt een parameter om het te bouwen niveau te verkrijgen, berekent de grootte ervan en voert een double voor loop uit, één voor de hoogte en één voor de breedte. Vervolgens wordt een nieuwe Brick-instantie gemaakt die wordt geplaatst op basis van de breedte, hoogte en het nummer dat overeenkomt met ik en j. De steen wordt aangegeven als statisch in de physics engine omdat deze de botsing niet zal detecteren, zal deze worden afgehandeld door de bal welke is de enige dynamisch natuurkunde type.
Ten slotte wordt de steen toegevoegd aan de stenengroep om deze buiten deze functie te benaderen.
function buildLevel (level) - Niveau lengte, hoogte local len = table.maxn (level) bricks: toFront () voor i = 1, len do voor j = 1, W_LEN do if (level [i] [j] == 1) en dan local brick = display.newImage ('brick.png') brick.name = 'brick' brick.x = BRICK_W * j - OFFSET brick.y = BRICK_H * i physics.addBody (brick, density = 1, friction = 0, bounce = 0) brick.bodyType = 'static' bricks.insert (bricks, brick) end end end end
Met deze functie kunt u luisteraars toevoegen of verwijderen. Het gebruikt een parameter om te bepalen of de luisteraars moeten worden toegevoegd of verwijderd. Merk op dat sommige regels becommentarieerd zijn omdat de functies om ze af te handelen nog niet zijn gemaakt.
functie gameListeners (actie) if (action == 'add') en dan Runtime: addEventListener ('accelerometer', movePaddle) - Runtime: addEventListener ('enterFrame', update) paddle: addEventListener ('collision', bounce) --bal : addEventListener ('collision', removeBrick) else Runtime: removeEventListener ('accelerometer', movePaddle) - Runtime: removeEventListener ('enterFrame', update) paddle: removeEventListener ('collision', bounce) --ball: removeEventListener ('collision ', removeBrick) einde
In deze functie noemen we de gameListeners functie die de beweging en de spelbesturing zal starten:
function startGame: tik (e) achtergrond: removeEventListener ('tap', startGame) gameListeners ('add') - Physics physics.addBody (paddle, density = 1, friction = 0, bounce = 0) physics.addBody ( ball, density = 1, friction = 0, bounce = 0) paddle.bodyType = 'static' end
Wanneer de bal de peddel raakt, de ySpeed
is ingesteld op negatief om de bal omhoog te laten gaan. We controleren ook in welke kant van de peddel de bal heeft geslagen om de kant te kiezen waar hij naartoe zal bewegen. De botsing wordt gedetecteerd door de botsing gebeurtenis luisteraar toegevoegd in de gameListeners
functie:
functie bounce (e) ySpeed = -5 - Paddle Collision, controleer aan welke kant van de paddle de bal slaat, links, rechts als ((ball.x + ball.width * 0.5) < paddle.x) then xSpeed = -5 elseif((ball.x + ball.width * 0.5) >= paddle.x) en vervolgens xSpeed = 5 einde - Voer de code Main uit ()
In het volgende en laatste deel van de serie zullen we omgaan met baksteen- en muurbotsingen, scores, niveaus en de laatste stappen die moeten worden genomen voorafgaand aan de release, zoals app-testen, het maken van een startscherm, het toevoegen van een pictogram en, ten slotte, het bouwen van de app. Blijf op de hoogte voor het laatste deel!