Crea un gioco Brick Breaker con Corona SDK Controlli di gioco

In questa serie di tutorial, creeremo ex novo un gioco Brick Breaker utilizzando Corona SDK. L'obiettivo di questo gioco è di controllare una pagaia simile a un pong per colpire una palla contro una pila di mattoni fino a quando non si rompono tutti.


Da dove siamo partiti?

Se non lo hai già fatto, assicurati di leggere parte 1 di questa serie per comprendere appieno il codice in questo tutorial.

Passo 16: dichiarazione delle funzioni

Dopo aver dichiarato una tabella multidimensionale per mantenere i nostri livelli nel passaggio 15, ora dichiara tutte le funzioni che verranno utilizzate in questa app:

 addMenuScreen locale =  tweenMS locale =  localAbout hide  local rmvAbout =  local addGameScreen =  local buildLevel =  local movePaddle =  local gameListeners =  local startGame =  update locale =  bounce locale =  local removeBrick =  alert locale =  local restart =  local changeLevel = 

Passaggio 17: codice costruttore

Ora crea Principale(), la prima funzione che verrà chiamata all'avvio del nostro gioco:

 funzione locale Main () addMenuScreen () end

Passaggio 18: schermata di menu Aggiungi

Il prossimo snippet di codice aggiunge la grafica dello schermo del menu allo stage e li memorizza nel schermata MENU gruppo:

 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 'menuScreen: insert (mScreen) startB.x = 160 startB.y = 260 menuScreen: insert (startB) aboutB.x = 160 aboutB.y = 310 menuScreen: insert (aboutB)

Passo 19: ascoltatori di pulsanti

Gli ascoltatori vengono aggiunti ai pulsanti per eseguire il tweenMS funzione quando toccato:

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

Step 20: Call About Screen

Questa funzione controlla quale pulsante è stato toccato e visualizza la vista corrispondente:

 function tweenMS: tocca (e) if (e.target.name == 'startB') quindi - Avvia la transizione di gioco.to (menuScreen, time = 300, y = -menuScreen.height, transition = easing.outExpo, onComplete = addGameScreen) - Call AboutScreen aboutScreen = display.newImage ('aboutScreen.png') transition.from (aboutScreen, time = 300, x = menuScreen.contentWidth, transition = easing.outExpo) aboutScreen: addEventListener (' tocca ', nascondiInformazioni)

Passaggio 21: Nascondi i pulsanti di menu

Queste linee, la conclusione del tweenMS funzione dall'alto, nascondi i pulsanti della schermata del menu per evitare i tocchi indesiderati:

 startB.isVisible = false; aboutB.isVisible = false; fine fine

Passaggio 23: Rimuovi informazioni sullo schermo

La prossima funzione interpola lo schermo e lo rimuove:

 function hideAbout: tap (e) transition.to (aboutScreen, time = 300, x = aboutScreen.width * 2, transition = easing.outExpo, onComplete = rmvAbout) end function rmvAbout () aboutScreen: removeSelf () - Abilita Menu Pulsanti startB.isVisible = true; aboutB.isVisible = true; fine

Passaggio 24: schermata del menu Destroy

Quando l'utente tocca il pulsante di avvio, iniziamo la creazione della schermata di gioco. La prima cosa da fare è distruggere la schermata del menu:

 function addGameScreen () - Destroy Menu Screen menuScreen: removeSelf () menuScreen = nil

Passaggio 25: Aggiungi schermata di gioco

Successivamente aggiungiamo la grafica di paddle e ball:

 -- Aggiungi schermata di gioco 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 = 'palla'

Passaggio 26: chiama la funzione del livello di costruzione

Quindi costruiamo il livello. Questa funzione è completamente spiegata più avanti nel tut:

 buildLevel (livelli [1])

Passaggio 27: testo dei punteggi e dei livelli

L'ultima grafica da aggiungere riguarda il testo dei punteggi e dei livelli:

 scoreText = display.newText ('Score:', 5, 2, 'akashi', 14) scoreText: setTextColor (254, 203, 50) scoreNum = 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)

Passaggio 28: Inizia listener

Un ascoltatore viene aggiunto allo sfondo. Questo ascoltatore inizierà il gioco quando viene toccato lo sfondo:

 background: addEventListener ('tap', startGame) end

Passaggio 29: sposta la paletta

La paletta sarà controllata usando l'accelerometro del dispositivo. I dati saranno ottenuti utilizzando e.xGravity e passati alla proprietà x della pagaia.

 function movePaddle: accelerometer (e) - Accelerometer Movement paddle.x = display.contentCenterX + (display.contentCenterX * (e.xGravity * 3))

Passaggio 30: collisione bordo pala

Per impedire che la paletta lasci il palco, creiamo bordi invisibili ai lati dello schermo:

 if ((paddle.x - paddle.width * 0.5) < 0) then paddle.x = paddle.width * 0.5 elseif((paddle.x + paddle.width * 0.5) > display.contentWidth) quindi paddle.x = display.contentWidth - paddle.width * 0.5 end end

Passaggio 31: Funzione di livello di costruzione

I livelli saranno creati da questa funzione.

Usa un parametro per ottenere il livello da costruire, calcola le sue dimensioni ed esegue un ciclo doppio per ciclo, uno per l'altezza e uno per la larghezza. Successivamente, crea una nuova istanza Brick che viene posizionata in base alla sua larghezza, altezza e il numero corrispondente a io e j. Il mattone è dichiarato come statico nel motore fisico in quanto non rileverà la collisione, che sarà gestita dal palla che è l'unico dinamico tipo di fisica.

Infine, il mattone viene aggiunto al gruppo di mattoni per accedervi al di fuori di questa funzione.

 function buildLevel (level) - Lunghezza del livello, altezza locale len = table.maxn (livello) brick: toFront () per i = 1, len do per j = 1, W_LEN do if (level [i] [j] == 1) then 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 (brick, brick) end end end end

Passaggio 32: Ascoltatori di giochi

Questa funzione aggiunge o rimuove gli ascoltatori. Usa un parametro per determinare se gli ascoltatori dovrebbero essere aggiunti o rimossi. Si noti che alcune linee sono commentate poiché le funzioni per gestirle non sono state ancora create.

 function gameListeners (action) if (action == 'add') then Runtime: addEventListener ('accelerometer', movePaddle) --Runtime: addEventListener ('enterFrame', update) paddle: addEventListener ('collision', bounce) --ball : addEventListener ('collision', removeBrick) else Runtime: removeEventListener ('accelerometer', movePaddle) --Runtime: removeEventListener ('enterFrame', update) paddle: removeEventListener ('collision', bounce) --ball: removeEventListener ('collision ', removeBrick) end end

Passaggio 33: Inizia partita

In questa funzione chiamiamo il gameListeners funzione che avvierà il movimento e i controlli del gioco:

 function startGame: tap (e) background: removeEventListener ('tap', startGame) gameListeners ('add') - Physics physics.addBody (paddle, density = 1, friction = 0, bounce = 0) physics.addBody ( palla, densità = 1, attrito = 0, rimbalzo = 0) paddle.bodyType = fine "statico"

Passo 34: Collisioni con palette a pale

Quando la palla colpisce la paletta, il yspeed è impostato su negativo per far salire la pallina. Controlliamo anche in quale lato della paletta la palla ha colpito per scegliere il lato dove si muoverà in seguito. La collisione viene rilevata dal collisione ascoltatore di eventi aggiunto nel gameListeners funzione:

 funzione rimbalzo (e) ySpeed ​​= -5 - Collisione paletta, controlla su quale lato della paletta colpisce la palla, a sinistra, a destra se ((palla.x + sfera.pertura * 0.5) < paddle.x) then xSpeed = -5 elseif((ball.x + ball.width * 0.5) >= paddle.x) quindi xSpeed ​​= 5 end end - Esegui il codice Main ()

Avanti nella serie

Nella parte successiva e finale della serie, gestiremo collisioni di mattoni e muri, punteggi, livelli e le fasi finali da eseguire prima del rilascio, come test delle app, creazione di una schermata iniziale, aggiunta di un'icona e, infine, creazione del app. Restate sintonizzati per la parte finale!