Maak een Brick Breaker-game met de Corona SDK Game Controls

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.


Waar we gebleven zijn?

Als u dit nog niet hebt gedaan, lees dan alsjeblieft deel 1 van deze serie om de code in deze zelfstudie volledig te begrijpen.

Stap 16: Functie Verklaringen

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 = 

Stap 17: Constructorcode

Nu maken Hoofd(), de eerste functie die wordt aangeroepen wanneer onze game start:

 lokale functie Main () addMenuScreen () end

Stap 18: Menuscherm toevoegen

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)

Stap 19: Knopluisteraars

Luisteraars worden toegevoegd aan de knoppen om de tweenMS functie bij tikken:

 startB: addEventListener ('tap', tweenMS) aboutB: addEventListener ('tap', tweenMS) einde

Stap 20: Bel over het scherm

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)

Stap 21: Verberg menuknoppen

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

Stap 23: verwijder over het scherm

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

Stap 24: Verniet het menuscherm

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

Stap 25: Spelscherm toevoegen

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'

Stap 26: Call Build Level-functie

Dan bouwen we het niveau. Deze functie wordt later in de tut volledig uitgelegd:

 buildLevel (levels [1])

Stap 27: Scores & Niveaus Tekst

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)

Stap 28: start luisteraar

Er wordt een luisteraar aan de achtergrond toegevoegd. Deze luisteraar start het spel wanneer de achtergrond wordt aangeboord:

 achtergrond: addEventListener ('tik op', startspel) einde

Stap 29: beweeg peddel

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))

Stap 30: Padding Border Collision

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

Stap 31: Build Level-functie

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

Stap 32: Game Luisteraars

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

Stap 33: Start Game

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

Stap 34: Paddle-ball botsingen

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 ()

Volgende in de serie

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!