Crea un juego de romper ladrillos con Corona SDK Detección de colisiones

¡Bienvenido al tutorial final de nuestra serie de juegos Brick Breaker! En este tutorial, manejaremos la lógica de las colisiones restantes, comprobaremos los estados de ganancia y pérdida, los niveles de cambio y más.


Donde dejamos?

Asegúrate de leer parte 1 y parte 2 de esta serie para entender completamente el código presentado en este tutorial..

Paso 35: Detectar colisiones de ladrillos

Cuando la pelota colisiona con un ladrillo, usaremos la misma técnica aplicada a la paleta para determinar el lado que seguirá la pelota:

 función removeBrick (e): verifique en qué lado del ladrillo golpea la bola, izquierda, derecha si (e.other.name == 'brick' y (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)) luego xSpeed ​​= 5 end end

Paso 37: quitar el ladrillo

Cuando se golpea un ladrillo, usamos el otro parámetro del colisión evento para averiguar exactamente qué ladrillo fue golpeado, y luego eliminarlo del escenario y del grupo de ladrillos:

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

Paso 38: Añadir puntuación

Cada golpe de ladrillo agregará 100 puntos a la puntuación. La puntuación se tomará de la constante de puntuación y se agregará a la puntuación actual como texto.

 puntuación = puntuación + 1
scoreNum.text = score * SCORE_CONST
scoreNum: setReferencePoint (display.CenterLeftReferencePoint)
scoreNum.x = 54
fin

Paso 39: Revisar los ladrillos

Este código verifica si quedan más ladrillos en el escenario y muestra un mensaje "usted ganó" si no:

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

Paso 40: Movimiento de la bola

La velocidad de la pelota está determinada por la xSpeed y ySpeed variables Cuando el actualizar se ejecuta la función, la bola comienza a moverse usando estos valores para colocarlos en cada cuadro.

 Actualización de la función (e) - Movimiento de la bola ball.x = ball.x + xSpeed ​​ball.y = ball.y + ySpeed

Paso 41: Colisión en la pared

Este código verifica las colisiones en la pared con la pelota y responde enviando la pelota en la dirección opuesta cuando sea necesario:

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

Paso 42: Condición de pérdida

Una sentencia if se usa para verificar si la paleta pierde la pelota. Si es verdadero, se muestra una alerta preguntando al usuario si desea volver a intentarlo.

 if (ball.y + ball.height> paddle.y + paddle.height) entonces alerta ('¿Perdiste', 'Jugar de nuevo?') gameEvent = 'pierde' final - abajo / pierde

Paso 43: Mensaje de estado del juego

La pantalla de alerta muestra la información del jugador sobre el estado del juego. Se muestra cuando se alcanza un evento de ganar / perder.

Se utilizan dos parámetros en esta función:

  • t: El titulo de alerta
  • metro: Un mensaje corto
 función 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, transition = 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.CenterReference) ) msgTF.x = display.contentCenterX msgTF.y = display.contentCenterY + 15 cuadro: addEventListener ('tap', reiniciar) alertScreen = display.newGroup () alertScreen: insert (alertBg) alertScreen: insert (box) alertScreen: insert (alert) titleTF) alertScreen: insert (msgTF) end

Paso 44: Reiniciar

La siguiente función verifica el estado del juego (ganar, perder, finalizar) y realiza la acción correspondiente:

 función reinicio (e) si (gameEvent == 'win' y table.maxn (niveles)> currentLevel) luego currentLevel = currentLevel + 1 changeLevel (niveles [currentLevel]) - siguiente nivel levelNum.text = tostring (currentLevel) elseif ( gameEvent == 'win' y table.maxn (niveles) <= 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

Paso 45: Cambiar Nivel

Esta función cambia las actualizaciones del nivel cuando es necesario:

 function changeLevel (level) - Borrar ladrillos de nivel ladrillos: removeSelf () bricks.numChildren = 0 bricks = display.newGroup () - Eliminar el cuadro de alerta: removeEventListener ('toque', reiniciar) alertScreen: removeSelf () alertScreen = nil - - Restablecer la posición de la bola y la paleta ball.x = (display.contentWidth * 0.5) - (ball.width * 0.5) ball.y = (paddle.y - paddle.height) - (ball.height * 0.5) -2 paddle. x = display.contentWidth * 0.5 - Redraw Bricks buildLevel (level) - Fondo de inicio: addEventListener ('tap', startGame) final

Paso 46: Llamar a la función principal

Para comenzar el juego inicialmente, el Principal La función necesita ser llamada. Con el código anterior en su lugar, lo haremos aquí:

 Principal()

Paso 47: Crea la pantalla de carga

El archivo Default.png es una imagen que se mostrará justo al iniciar la aplicación, mientras que iOS carga los datos básicos para mostrar la pantalla principal. Agregue esta imagen a su carpeta de origen del proyecto, se agregará automáticamente por el complemento de Corona.


Paso 48: Icono

Usando los gráficos que creó antes, ahora puede crear un ícono agradable y atractivo. El tamaño del icono para el icono del iPhone sin retina es de 57x57px, pero la versión de la retina es de 114x114px y la tienda de iTunes requiere una versión de 512x512px. Sugiero crear primero la versión 512x512 y luego reducir la escala para los otros tamaños..

No es necesario que tenga las esquinas redondeadas o el brillo transparente, iTunes y el iPhone lo harán por usted..


Paso 49: Probando en el simulador

Es hora de hacer la prueba final. Abra el simulador de Corona, busque la carpeta de su proyecto y luego haga clic en Abrir. Si todo funciona como se espera, estás listo para el paso final!


Paso 50: Construir

En el simulador de corona ir a Archivo> Construir y seleccione su dispositivo de destino. Rellene los datos requeridos y haga clic construir. Espere unos segundos y su aplicación estará lista para la prueba del dispositivo y / o el envío para su distribución!


Conclusión

El resultado final es un juego personalizable y entretenido. Intenta agregar tus propios gráficos y niveles personalizados para condimentar las cosas!

Espero que les haya gustado esta serie de tutoriales y les resulte útil. Gracias por leer!