Crea un gioco Brick Breaker con Corona SDK Rilevamento collisione

Benvenuto nel tutorial finale della nostra serie di giochi Brick Breaker! In questo tutorial, gestiremo la logica per le rimanenti collisioni, controlleremo gli stati di vincita e perdita, cambieremo i livelli e altro ancora.


Da dove siamo partiti?

Assicurati di leggere parte 1 e parte 2 di questa serie per comprendere appieno il codice presentato in questo tutorial.

Passaggio 35: Rileva le collisioni in mattoni

Quando la palla si scontra con un mattone, useremo la stessa tecnica applicata alla paletta per determinare il lato che seguirà la palla:

 function removeBrick (e) - Controlla quale lato del mattone colpisce la palla, a sinistra, a destra se (e.other.name == 'brick' e (ball.x + ball.width * 0.5) < (e.other.x + e.other.width * 0.5)) then xSpeed = -5 elseif(e.other.name == 'brick' and (ball.x + ball.width * 0.5) >= (e.other.x + e.other.width * 0.5)) quindi xSpeed ​​= 5 end end

Passaggio 37: rimuovere Brick

Quando viene colpito un mattone, usiamo l'altro parametro del collisione evento per scoprire esattamente quale mattone è stato colpito, quindi rimuoverlo dal gruppo stage e mattoni:

 -- Bounce, Rimuovi if (e.other.name == 'brick') quindi ySpeed ​​= ySpeed ​​* -1 e.other: removeSelf () e.other = nil bricks.numChildren = bricks.numChildren - 1

Passaggio 38: aggiungi punteggio

Ogni colpo di mattoni aggiungerà 100 punti al punteggio. Il punteggio verrà preso dalla costante del punteggio e aggiunto al punteggio corrente come testo.

 punteggio = punteggio + 1
scoreNum.text = score * SCORE_CONST
scoreNum: setReferencePoint (display.CenterLeftReferencePoint)
scoreNum.x = 54
fine

Passo 39: Verifica mattoni

Questo codice controlla se ci sono più mattoncini sul palco e visualizza un messaggio "hai vinto" se non:

 se (bricks.numChildren < 0) then alert(' You Win!', ' Next Level ?') gameEvent = 'win' end end

Step 40: Movimento della palla

La velocità della palla è determinata dal xSpeed e yspeed variabili. Quando il aggiornare la funzione viene eseguita, la palla inizia a muoversi usando questi valori per il posizionamento su ogni fotogramma.

 aggiornamento della funzione (e) - Movimento della palla ball.x = ball.x + xSpeed ​​ball.y = ball.y + ySpeed

Passo 41: Collisione a muro

Questo codice controlla le collisioni sulla parete con la palla e risponde inviando la palla nella direzione opposta quando necessario:

 if (ball.x < 0) then ball.x = ball.x + 3 xSpeed = -xSpeed end--Left if((ball.x + ball.width) > display.contentWidth) quindi ball.x = ball.x - 3 xSpeed ​​= -xSpeed ​​end - Right if (ball.y < 0) then ySpeed = -ySpeed end--Up

Passaggio 42: Condizione di perdita

Un'istruzione if viene utilizzata per verificare se la pagaia non viene rispettata. Se è vero, viene visualizzato un avviso che chiede all'utente se desidera riprovare.

 if (ball.y + ball.height> paddle.y + paddle.height) quindi alert ('You Lose', 'Play Again?') gameEvent = 'lose' end-down / lose

Passaggio 43: messaggio di stato del gioco

La schermata di avviso mostra le informazioni del giocatore sullo stato del gioco. Viene mostrato quando viene raggiunto un evento di vincita / perdita.

In questa funzione vengono utilizzati due parametri:

  • t: Il titolo dell'avviso
  • m: Un breve messaggio
 funzione alert (t, m) gameListeners ('remove') alertBg = display.newImage ('alertBg.png') box = display.newImage ('alertBox.png', 90, 202) transition.from (box, time = 300, xScale = 0,5, yScale = 0,5, transizione = easing.outExpo) titleTF = display.newText (t, 0, 0, 'akashi', 19) titleTF: setTextColor (254,203,50) titleTF: setReferencePoint (display.CenterReferencePoint titleTF.x = display.contentCenterX titleTF.y = display.contentCenterY - 15 msgTF = display.newText (m, 0, 0, 'akashi', 12) msgTF: setTextColor (254,203,50) msgTF: setReferencePoint (display.CenterReferencePoint) ) msgTF.x = display.contentCenterX msgTF.y = display.contentCenterY + 15 box: addEventListener ('tocca', riavvia) alertScreen = display.newGroup () alertScreen: insert (alertBg) alertScreen: insert (box) alertScreen: insert ( titleTF) alertScreen: insert (msgTF) end

Passaggio 44: riavvio

La prossima funzione controlla lo stato del gioco (vinci, perdi, finito) ed esegue l'azione corrispondente:

 function restart (e) if (gameEvent == 'win' e table.maxn (levels)> currentLevel) then currentLevel = currentLevel + 1 changeLevel (levels [currentLevel]) - next level levelNum.text = tostring (currentLevel) elseif ( gameEvent == 'win' e table.maxn (livelli) <= currentLevel) then box:removeEventListener('tap', restart) alertScreen:removeSelf() alertScreen = nil alert(' Game Over', ' Congratulations!') gameEvent = 'finished' elseif(gameEvent == 'lose') then changeLevel(levels[currentLevel])--same level elseif(gameEvent == 'finished') then addMenuScreen() transition.from(menuScreen, time = 300, y = -menuScreen.height, transition = easing.outExpo) box:removeEventListener('tap', restart) alertScreen:removeSelf() alertScreen = nil currentLevel = scoreText:removeSelf() scoreText = nil scoreNum:removeSelf() scoreNum = nil levelText:removeSelf() levelText = nil levelNum:removeSelf() levelNum = nil ball:removeSelf() ball = nil paddle:removeSelf() paddle = nil score = 0 end end

Step 45: Cambia livello

Questa funzione modifica l'aggiornamento del livello quando necessario:

 function changeLevel (level) - Clear Level Mattoni mattoni: removeSelf () bricks.numChildren = 0 brick = display.newGroup () - Remove Alert box: removeEventListener ('tap', restart) alertScreen: removeSelf () alertScreen = nil - - Ripristina la posizione della sfera e della paletta ball.x = (display.contentWidth * 0.5) - (ball.width * 0.5) ball.y = (paddle.y - paddle.height) - paddle (altezza della sfera * 0.5) -2. x = display.contentWidth * 0.5 - Redraw Bricks buildLevel (level) - Avvia lo sfondo: addEventListener ('tap', startGame) end

Passo 46: Chiama la funzione principale

Per iniziare inizialmente il gioco, il Principale la funzione deve essere chiamata. Con il codice sopra riportato, lo faremo qui:

 Principale()

Passaggio 47: creare la schermata di caricamento

Il file Default.png è un'immagine che verrà visualizzata quando si avvia l'applicazione mentre iOS carica i dati di base per mostrare la schermata principale. Aggiungi questa immagine alla cartella sorgente del progetto, verrà automaticamente aggiunta dal complino Corona.


Passaggio 48: icona

Usando la grafica che hai creato prima ora puoi creare un'icona carina e di bell'aspetto. La dimensione dell'icona per l'icona dell'iPhone non retina è 57x57px, ma la versione retina è 114x114px e lo store iTunes richiede una versione 512x512px. Suggerisco di creare prima la versione 512x512 e poi ridimensionarla per le altre dimensioni.

Non è necessario avere gli angoli arrotondati o il bagliore trasparente, iTunes e l'iPhone lo faranno per te.


Passaggio 49: test nel simulatore

È tempo di fare il test finale. Apri il simulatore Corona, vai alla cartella del progetto, quindi fai clic su apri. Se tutto funziona come previsto, sei pronto per il passaggio finale!


Passaggio 50: Build

Nel Corona Simulator vai a File> Crea e seleziona il tuo dispositivo di destinazione. Compila i dati richiesti e clicca costruire. Attendi qualche secondo e la tua app sarà pronta per il test del dispositivo e / o l'invio per la distribuzione!


Conclusione

Il risultato finale è un gioco personalizzabile e divertente. Prova ad aggiungere la tua grafica personalizzata e i livelli per rendere le cose più interessanti!

Spero ti sia piaciuta questa serie di tutorial e la trovi utile. Grazie per aver letto!