Creați un joc de întrerupere a caramizilor cu ajutorul programului Corona SDK Controale joc

În această serie de tutori, vom construi jocul Brick Breaker de la zero, folosind kitul Corona SDK. Scopul acestui joc este acela de a controla o paletă asemănătoare pongului pentru a bate o minge împotriva unui teanc de cărămizi până când toți pauză.


Unde am plecat?

Dacă nu ați făcut deja acest lucru, vă rugăm să citiți cu atenție partea 1 din această serie pentru a înțelege pe deplin codul din acest tutorial.

Pasul 16: Declarații de funcții

După ce ați declarat un tabel multidimensional pentru a ține etapele noastre la Pasul 15, declarați acum toate funcțiile care vor fi folosite în această aplicație:

 locală addMenuScreen =  locale tweenMS =  locale hideAbout =  locală rmvAbout =  locală addGameScreen =  locală buildLevel = local movePaddle =  localListeners =  local startGame = lansarea locală =  local removeBrick = local alert =  restart local =  local changeLevel = 

Pasul 17: Codul constructorului

Acum creați Principal(), prima funcție care va fi apelată când începe jocul nostru:

 funcția locală Main () addMenuScreen () sfârșit

Pasul 18: Adăugați ecranul meniului

Următorul fragment de cod adaugă graficele de meniu pe scenă și le stochează în menuScreen grup:

 funcția addMenuScreen () menScreen = display.newGroup () mScreen = display.newImage ('mScreen.png') startB = display.newImage ('startB.png') startB.name = 'startB' aboutB = .png ') despreB.name =' despreB 'meniuScreen: inserare (mScreen) startB.x = 160 startB.y = 260 meniuScreen: inserare (startB) aboutB.x = 160 aboutB.y = 310 menScreen:

Pasul 19: Ascultați butoanele

Ascultătorii sunt adăugați la butoanele pentru a efectua tweenMS funcție atunci când este apăsat:

 startB: addEventListener ('atinge', tweenMS) despreB: addEventListener ('tap', tweenMS) sfârșit

Pasul 20: Apel în legătură cu ecranul

Această funcție verifică care buton a fost lovit și afișează vizualizarea corespunzătoare:

 funcția tweenMS: atingeți (e) dacă (e.target.name == 'startB') atunci - începeți jocul transition.to (menScreen, time = 300, y = -menuScreen.height, transition = easing.outExpo, onComplete = addGameScreen altceva - Apel AboutScreen aboutScreen = display.newImage ('aboutScreen.png') transition.from (despreScreen, time = 300, x = menuScreen.contentWidth, transition = atingeți ", ascundeAbout)

Pasul 21: Ascundeți butoanele de meniu

Aceste linii, concluzia tweenMS funcția de mai sus, ascundeți butoanele ecranului de meniu pentru a evita apăsările nedorite:

 startB.isVisible = false; despreB.isVisible = false; sfârșitul final

Pasul 23: Eliminați Despre ecran

Următoarea funcție tweens ecranul în jurul valorii de scenă și îl elimină:

 hideAbout: atingeți (e) transition.to (despreScreen, time = 300, x = aboutScreen.width * 2, tranziție = easing.outExpo, onComplete = rmvAbout) sfârșitul funcției rmvAbout Butoanele de meniu startB.isVisible = true; despreB.isVisible = adevărat; Sfârșit

Pasul 24: Distruge ecranul meniului

Când utilizatorul pune pe butonul de pornire începem crearea ecranului de joc. Primul lucru pe care trebuie să-l faci este distrugerea ecranului de meniu:

 funcția addGameScreen () - Distruge meniul ecranului meniuScreen: removeSelf () menuScreen = nul

Pasul 25: Adăugați ecranul pentru jocuri

Apoi adăugăm graficul cu zbaturi și cu bile:

 -- Adăugați un joc Parametri de afișare ecran paddle = display.newImage ('paddle.png') ball = display.newImage ('ball.png') paddle.x = 160 paddle.y = 460 ball.x = 160 ball.y = 446 paddle.name = 'lopata' ball.name = 'minge'

Pasul 26: Apelați funcția Level Build

Apoi construim nivelul. Această funcție este explicată pe scurt în cele ce urmează:

 buildLevel (niveluri [1])

Pasul 27: Scoruri și niveluri Text

Ultima grafică adăugată este pentru scorul și nivelurile textului:

 ScoreText = display.newText ('Scor:', 5, 2, 'akashi', 14) scorText: setTextColor (254, 203, 50) scoreNum = display.newText ) Nivelul: setTextColor (254,203,50) levelText = display.newText ('Nivel:', 260, 2, 'akashi', 14) 307, 2, 'akashi', 14) nivelNum: setTextColor (254,203,50)

Pasul 28: Pornește ascultătorul

Un ascultător este adăugat în fundal. Acest ascultător va începe jocul atunci când fundalul este capturat:

 fundal: addEventListener ('tap', startGame) sfârșit

Pasul 29: Deplasați o paletă

Paleta va fi controlată utilizând accelerometrul dispozitivului. Datele vor fi obținute utilizând e.xGravity și transferate la proprietatea x a paletei.

 funcția movePaddle: accelerometru (e) - Accelerometru Mișcare paddle.x = display.contentCenterX + (display.contentCenterX * (e.xGravity * 3))

Pasul 30: Coliziunea frontală a paletelor

Pentru a opri paleta de la ieșirea din scenă, creăm granițe invizibile pe părțile laterale ale ecranului:

 dacă ((paddle.x - paddle.width * 0.5) < 0) then paddle.x = paddle.width * 0.5 elseif((paddle.x + paddle.width * 0.5) > display.contentWidth), apoi paddle.x = display.contentWidth - paddle.width * 0.5 sfârșitul final

Pasul 31: Funcția nivel de construcție

Nivelurile vor fi construite de această funcție.

Utilizează un parametru pentru a obține nivelul de construit, își calculează dimensiunea și execută un dublu pentru buclă, unul pentru înălțime și unul pentru lățime. Apoi, creează o nouă instanță de caramida care este plasată în funcție de lățimea, înălțimea și numărul care corespunde eu și j. Caramida este declarată ca static în motorul fizicii, deoarece nu va detecta coliziunea, care va fi manipulată de către minge care este singura dinamic tipul fizicii.

În cele din urmă, cărămida este adăugată grupului de cărămizi pentru al accesa în afara acestei funcții.

 funcția buildLevel (nivel) - Lungimea nivelului, înălțimea locală len = table.maxn (nivel) cărămizile: toFront () pentru i = 1, len do pentru j = 1, W_LEN do dacă [nivel [i] [j] == 1) apoi caramida locală = display.newImage ('brick.png') brick.name = 'brick' brick.x = BRICK_W * j - OFFSET brick.y = BRICK_H * i fizics.addBody (caramida, friction = 0, bounce = 0) brick.bodyType = "static" bricks.insert (cărămizi, cărămidă) end end end end

Pasul 32: ascultători de jocuri

Această funcție adaugă sau elimină ascultătorii. Utilizează un parametru pentru a determina dacă ascultătorii ar trebui să fie adăugați sau eliminați. Rețineți că unele linii sunt comentate deoarece funcțiile pentru a le gestiona nu au fost încă create.

 funcția gameListeners (acțiune) dacă (action == 'add') apoi Runtime: addEventListener ('accelerometer', movePaddle) --ball: addEventListener ('enterFrame' : addEventListener ('collision', removeBrick) altfel Runtime: removeEventListener ('accelerometer', movePaddle) --ball: removeEventListener ('collision' ', removeBrick) sfârșitul final

Pasul 33: Începeți jocul

În această funcție numim gameListeners care va porni comenzile de mișcare și de joc:

 funcția startGame: atingeți (e) fundal: removeEventListener ('tap', startGame) gameListeners ('add') - physics.addBody (paddle, density = 1, friction = 0, bounce = minge, densitate = 1, frecare = 0, bounce = 0) paddle.bodyType = capăt "static"

Pasul 34: Coliziuni cu palete

Când mingea atinge paleta, ySpeed este setat la negativ pentru a face mingea să urce. De asemenea, verificăm în ce parte a paletei mingea a lovit pentru a alege partea în care se va muta în continuare. Coliziunea este detectată de către coliziune ascultător de evenimente adăugat în gameListeners funcţie:

 (e) ySpeed ​​= -5 - Coliziunea cu palete, verificați care parte a paletei lovește mingea, stânga, dreapta dacă ((ball.x + ball.width * 0.5) < paddle.x) then xSpeed = -5 elseif((ball.x + ball.width * 0.5) >= paddle.x), apoi xSpeed ​​= 5 sfârșitul final - executați Code Main ()

Următorul în serie

În următoarea și ultima parte a seriei, vom aborda coliziuni de cărămizi și pereți, scoruri, nivele și pașii finali care trebuie făcuți înainte de lansarea testării aplicațiilor, crearea unui ecran de pornire, adăugarea unei pictograme și, în final, construirea app. Rămâi acordat pentru partea finală!

Cod