Crea un juego Brick Breaker con Corona SDK controles de juego

En esta serie de tutoriales, construiremos un juego Brick Breaker desde cero utilizando el SDK de Corona. El objetivo de este juego es controlar una paleta tipo pong para golpear una bola contra una pila de ladrillos hasta que todos se rompan..


Donde dejamos?

Si aún no lo ha hecho, asegúrese de leer parte 1 de esta serie para entender completamente el código en este tutorial..

Paso 16: Declaraciones de funciones

Habiendo declarado una tabla multidimensional para mantener nuestros niveles en el Paso 15, ahora declare todas las funciones que se utilizarán en esta aplicación:

 local addMenuScreen =  local tweenMS =  local hideAbout =  local rmvAbout =  local addGameScreen =  local buildLevel =  local movePaddle =  local gameListeners =  local startGame =  local play =  local bounce =  local removeBrick =  local alert =  local restart =  local changeLevel = 

Paso 17: Código Constructor

Ahora crea Principal(), La primera función que se llamará cuando comience nuestro juego:

 función local Main () addMenuScreen () end

Paso 18: Añadir pantalla de menú

El siguiente fragmento de código agrega los gráficos de la pantalla del menú al escenario y los almacena en el menuScreen grupo:

 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)

Paso 19: Oyentes de botones

Se añaden escuchas a los botones para realizar la tweenMS función cuando se toca:

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

Paso 20: Llamar sobre la pantalla

Esta función comprueba qué botón se pulsó y muestra la vista correspondiente:

 Función tweenMS: toque (e) si (e.target.name == 'startB') luego - Iniciar partida del juego. a (menuScreen, time = 300, y = -menuScreen.height, transition = easing.outExpo, onComplete = addGameScreen) else - Llame a AboutScreen aboutScreen = display.newImage ('aboutScreen.png') transition.from (aboutScreen, time = 300, x = menuScreen.contentWidth, transition = easing.outExpo)) aboutScreen: addEventListener (' tap ', ocultarAbout)

Paso 21: Ocultar botones de menú

Estas líneas, la conclusión de la tweenMS desde arriba, oculte los botones de la pantalla del menú para evitar toques no deseados:

 startB.isVisible = false; aboutB.isVisible = false; final fin

Paso 23: Eliminar acerca de la pantalla

La siguiente función ajusta la pantalla sobre el escenario y la elimina:

 función ocultarAbout: toque (e) transition.to (aboutScreen, time = 300, x = aboutScreen.width * 2, transition = easing.outExpo, onComplete = rmvAbout) end function rmvAbout () aboutScreen: removeSelf () - Habilitar Botones de menú startB.isVisible = true; aboutB.isVisible = true; fin

Paso 24: Destruye la pantalla de menú

Cuando el usuario toca el botón de inicio, comenzamos la creación de la pantalla del juego. Lo primero que debes hacer es destruir la pantalla de menú:

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

Paso 25: Añadir pantalla de juego

A continuación añadimos los gráficos de paletas y bolas:

 -- Agregar pantalla de juego 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 = 'ball'

Paso 26: Función de nivel de compilación de llamadas

Luego construimos el nivel. Esta función se explica completamente más adelante en el tut:

 buildLevel (niveles [1])

Paso 27: Puntuaciones y niveles de texto

Los últimos gráficos para agregar son para el texto de puntuación y niveles:

 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) nivelNum: setTextColor (254,203,50)

Paso 28: Iniciar el oyente

Un oyente se agrega al fondo. Este oyente iniciará el juego cuando se toque el fondo:

 fondo: addEventListener ('tap', startGame) final

Paso 29: mover la paleta

La paleta será controlada utilizando el acelerómetro del dispositivo. Los datos se obtendrán utilizando e.xGravity y se pasarán a la propiedad x de la paleta.

 Función movePaddle: acelerómetro (e) - Acelerómetro Movimiento paddle.x = display.contentCenterX + (display.contentCenterX * (e.xGravity * 3))

Paso 30: Colisión del borde de la paleta

Para evitar que la paleta salga del escenario, creamos bordes invisibles en los lados de la pantalla:

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

Paso 31: Construir la función de nivel

Los niveles serán construidos por esta función..

Utiliza un parámetro para obtener el nivel para construir, calcula su tamaño y ejecuta un bucle doble, uno para la altura y otro para el ancho. A continuación, crea una nueva instancia de Brick que se coloca de acuerdo con su ancho, alto y el número correspondiente a yo y j. El ladrillo se declara como estático en el motor de física, ya que no detectará la colisión, que será manejado por el bola cual es el unico dinámica tipo de física.

Por último, el ladrillo se agrega al grupo de ladrillos para acceder a él fuera de esta función.

 función buildLevel (nivel) - Longitud de nivel, altura len local = tabla.maxn (nivel) ladrillos: toFront () para i = 1, len do para j = 1, W_LEN hacer si (nivel [i] [j] == 1) luego local brick = display.newImage ('brick.png') brick.name = 'brick' brick.x = BRICK_W * j - OFFSET brick.y = BRICK_H * i physics.addBody (brick, densidad = 1, fricción = 0, rebotar = 0) brick.bodyType = 'static' bricks.insert (ladrillos, ladrillo) extremo extremo extremo extremo

Paso 32: Oyentes del juego

Esta función agrega o elimina los oyentes. Utiliza un parámetro para determinar si los oyentes deben agregarse o eliminarse. Tenga en cuenta que algunas líneas están comentadas ya que las funciones para manejarlas aún no se han creado..

 function gameListeners (action) if (action == 'add') luego Runtime: addEventListener ('accelerometer', movePaddle) --Runtime: addEventListener ('enterFrame', actualizar) paleta: addEventListener ('collision', bounce) --ball : addEventListener ('colision', removeBrick) else Runtime: removeEventListener ('acelerometer', movePaddle) --Runtime: removeEventListener ('enterFrame', actualizar) paleta: removeEventListener ('collision', bounce) --ball: removeEventListener ('collision ', removeBrick) end end end

Paso 33: Comience el juego

En esta función llamamos al gameListeners Función que iniciará el movimiento y los controles del juego:

 function startGame: tap (e) background: removeEventListener ('tap', startGame) gameListeners ('add') - Physics physics.addBody (paddle, density = 1, friction = 0, bounce = 0) physics.addBody ( bola, densidad = 1, fricción = 0, rebote = 0) paddle.bodyType = final 'estático'

Paso 34: Colisiones Paddle-Ball

Cuando la pelota golpea la paleta, el ySpeed Se establece en negativo para hacer subir la bola. También verificamos en qué lado de la paleta ha golpeado la pelota para elegir el lado donde se moverá a continuación. La colisión es detectada por el colisión oyente del evento adicional en el gameListeners función:

 función bounce (e) ySpeed ​​= -5 - Paddle Collision, verifique en qué lado de la paleta golpea la bola, izquierda, derecha si ((ball.x + ball.width * 0.5) < paddle.x) then xSpeed = -5 elseif((ball.x + ball.width * 0.5) >= paddle.x) luego xSpeed ​​= 5 end end - Ejecutar el Código Principal ()

Siguiente en la serie

En la siguiente y última parte de la serie, manejaremos colisiones de ladrillos y paredes, puntuaciones, niveles y los pasos finales que se deben tomar antes de lanzar las pruebas de aplicaciones, crear una pantalla de inicio, agregar un icono y, finalmente, crear la la aplicación Estén atentos para la parte final!