Crear un juego de desbloqueo - Agregar interacción

Esta es la segunda entrega de nuestro tutorial del juego Corona SDK Unblock Puzzle. En el tutorial de hoy, agregaremos a nuestra interfaz creando los elementos interactivos del juego de desbloqueo. Sigue leyendo!


Donde dejamos…

Asegúrese de revisar la parte 1 de la serie para comprender completamente y prepararse para este tutorial.


Paso 1: Iniciar los oyentes del botón

Esta función agrega los oyentes necesarios a la TitleView botones.

 function startButtonListeners (acción) if (acción == 'agregar') luego playBtn: addEventListener ('tap', showGameView) creditsBtn: addEventListener ('tap', showCredits) else playBtn: removeEventListener ('tap', showGameView) creditsBtn: removeEventListener 'tap', showCredits) end end end

Paso 2: Mostrar créditos

La pantalla de créditos se muestra cuando el usuario toca el botón Acerca de, un grifo El oyente se agrega a la vista de créditos para eliminarlo..

 función showCredits: toque (e) playBtn.isVisible = false creditsBtn.isVisible = false creditsView = display.newImage ('credits.png', 0, display.contentHeight) lastY = titleBg.y transition.to (titleBg, time = 300 , y = (display.contentHeight * 0.5) - (titleBg.height + 40)) transition.to (creditsView, time = 300, y = (display.contentHeight * 0.5) + 35, onComplete = function () creditsView: addEventListener ('tap', hideCredits) end) end

Paso 3: Ocultar Créditos

Cuando se toca la pantalla de créditos, se interpone fuera del escenario y se elimina.

 función hideCredits: toque (e) transition.to (creditsView, time = 300, y = display.contentHeight + 25, onComplete = function () creditsBtn.isVisible = true playBtn.isVisible = true creditsView: removeEventListener ('tap', hideCredits ) display.remove (creditsView) creditsView = nil end) transition.to (titleBg, time = 300, y = lastY); fin

Paso 4: Mostrar vista de juego

Cuando el comienzo se pulsa el botón, la vista de título se interpola y se elimina, revelando la vista del juego. Hay muchas partes involucradas en esta vista, así que las dividiremos en los siguientes pasos.

 función showGameView: toque (e) transition.to (titleView, time = 300, x = -titleView.height, onComplete = function () startButtonListeners ('rmv') display.remove (titleView) titleView = nil end)

Paso 5: Fondo del juego

Este código coloca la imagen de fondo del juego en el escenario:

 -- Game BG gameBg = display.newImage ('gameBg.png', 10, 10)

Paso 6: Movimientos TextField

A continuación añadimos el campo de texto de movimientos al escenario. Esto contará el número de movimientos realizados por el jugador..

 -- Movimientos Movimientos del campo de texto = mostrar.nuevoText ('0', 211, 66, display.systemFont, 16) movimientos: setTextColor (224, 180, 120)

Paso 7: Crear nivel

Esta parte crea los bloques definidos en la variable Nivel usando un doble para declaración.

 -- Crear nivel hblocks = display.newGroup () vblocks = display.newGroup () para i = 1, # l1 do para j = 1, # l1 [1] do si (l1 [i] [j] == 1) luego local v = display.newImage ('vrect.png', 10 + (j * 50) -50, 120 + (i * 50) -50) v: addEventListener ('touch', dragV) vblocks: insert (v) elseif ( l1 [i] [j] == 2) luego local h = display.newImage ('hrect.png', 10 + (j * 50) -50, 120 + (i * 50) -50) h: addEventListener (' toque ', arrastre H) hblocks: inserte (h) elseif (l1 [i] [j] == 3) luego s = display.newImage (' square.png ', 10 + (j * 50) -50, 120 + ( i * 50) -49) s: addEventListener ('touch', dragH) end end end end gameListeners ('add') end

Paso 8: Oyentes del juego

Esta función agrega los oyentes necesarios para iniciar la lógica del juego..

 función gameListeners (acción) if (acción == 'agregar') luego Runtime: addEventListener ('enterFrame', actualizar) else Runtime: removeEventListener ('enterFrame', actualizar) end end end

Paso 9: Arrastre horizontal

La siguiente función maneja el arrastre horizontal de los bloques..

 función dragH (e) e.target.lastX = 0 local currentX = 0 local initX = 0 si (e.phase == 'comenzó') entonces e.target.lastX = ex - e.target.x initX = e.target .x movement.text = tostring (tonumber (movement.text) + 1) elseif (e.phase == 'moved') luego e.target.x = ex - e.target.lastX currentX = e.target.x - - Calcular dirección si (initX < currentX) then dir = 'hl' --horizontal-left elseif(initX > currentX) entonces dir = 'hr' --horizontal-end end end end end

Paso 10: Arrastre vertical

Ahora creamos la función de arrastre vertical..

 función dragV (e) e.target.lastY = 0 actual localY = 0 local initY = 0 si (e.phase == 'comenzó') entonces e.target.lastY = ey - e.target.y initY = e.target .y movement.text = tostring (tonumber (movement.text) + 1) elseif (e.phase == 'moved') luego e.target.y = ey - e.target.lastY currentY = e.target.y - - Calcular dirección si (initY < currentY) then dir = 'vu' --Vertical-upwards elseif(initY > currentY) luego dir = 'vd' --vertical-downward end end end end

Paso 11: Función de prueba de golpe

Usaremos una función excelente y útil para la detección de colisiones sin física. Puede encontrar el ejemplo y la fuente original en el sitio web de Intercambio de Código de CoronaLabs.

 función hitTestObjects (obj1, obj2) local left = obj1.contentBounds.xMin <= obj2.contentBounds.xMin and obj1.contentBounds.xMax >= obj2.contentBounds.xMin derecho local = obj1.contentBounds.xMin> = obj2.contentBounds.xMin y obj1.contentBounds.xMin <= obj2.contentBounds.xMax local up = obj1.contentBounds.yMin <= obj2.contentBounds.yMin and obj1.contentBounds.yMax >= obj2.contentBounds.yMin local down = obj1.contentBounds.yMin> = obj2.contentBounds.yMin y obj1.contentBounds.yMin <= obj2.contentBounds.yMax return (left or right) and (up or down) end

Paso 12: Bordes verticales

Este código limita el movimiento creando bordes virtuales..

 actualización de la función (e) - Bordes verticales para i = 1, vblocks.numChildren do (vblocks [i] .y> = 370) luego vblocks [i] .y = 370 elseif (vblocks [i] .y <= 170) then vblocks[i].y = 170 end

Paso 13: Colisiones

Aquí manejamos las colisiones entre los bloques verticales y horizontales..

 -- Hit Test si (hitTestObjects (vblocks [i], hblocks [i]) y dir == 'vu') luego vblocks [i] .y = hblocks [i] .y + 75 elseif (hitTestObjects (vblocks [i], hblocks [i]) y dir == 'vd') luego vblocks [i] .y = hblocks [i] .y - 75 end if (hitTestObjects (vblocks [i], hblocks [i]) y dir == 'hr' ) luego hblocks [i] .x = vblocks [i] .x + 75 elseif (hitTestObjects (vblocks [i], hblocks [i]) y dir == 'hl') luego hblocks [i] .x = vblocks [i ] .x - 75 end if (hitTestObjects (s, vblocks [i])) entonces sx = vblocks [i] .x - 50 end

Paso 14: Bordes horizontales

Este código limita el movimiento horizontalmente creando bordes virtuales..

 -- Bordes horizontales para j = 1, hblocks.numLos niños hacen if (hblocks [j] .x> = 260) luego hblocks [j] .x = 260 elseif (hblocks [j] .x <= 60) then hblocks[j].x = 60 end end -- Square if(s.x >= 320) luego display.remove (s) display.remove (vblocks) display.remove (hblocks) alert () elseif (s.x <= 35) then s.x = 35 end end

Paso 15: Alerta

La función de alerta detiene el juego, muestra un mensaje y elimina a los oyentes activos.

 función alert () gameListeners ('rmv') local alertView = display.newImage ('alert.png', 80, display.contentHeight * 0.5 - 41) transition.from (alertView, time = 300, y = -82) extremo final

Paso 16: Llamar a la función principal

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

 Principal()

Paso 17: Cargando pantalla

los Default.png El archivo es una imagen que se mostrará justo al iniciar la aplicación mientras el 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 compilador de Corona.


Paso 18: Icono

Usando los gráficos que creaste anteriormente, ahora puedes crear un ícono bonito 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 necesita tener las esquinas redondeadas o el resplandor transparente; iTunes y el iPhone lo harán por ti..


Paso 19: 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 20: 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

En este tutorial, aprendiste a hacer que nuestra interfaz cobrara vida al permitir que el usuario interactúe con las piezas del juego. ¡Experimenta con el resultado final e intenta crear tu propia versión personalizada del juego! Espero que les haya gustado esta serie de tutoriales y les haya resultado útil. Gracias por leer!