Î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ă.
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.
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 =
Acum creați Principal()
, prima funcție care va fi apelată când începe jocul nostru:
funcția locală Main () addMenuScreen () sfârșit
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:
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
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)
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
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
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
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'
Apoi construim nivelul. Această funcție este explicată pe scurt în cele ce urmează:
buildLevel (niveluri [1])
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)
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
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))
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
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
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
Î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"
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 ()
Î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ă!