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..
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..
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 =
Ahora crea Principal()
, La primera función que se llamará cuando comience nuestro juego:
función local Main () addMenuScreen () end
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)
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
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)
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
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
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
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'
Luego construimos el nivel. Esta función se explica completamente más adelante en el tut:
buildLevel (niveles [1])
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)
Un oyente se agrega al fondo. Este oyente iniciará el juego cuando se toque el fondo:
fondo: addEventListener ('tap', startGame) final
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))
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
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
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
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'
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 ()
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!