Construye un juego Match Shapes - Añadiendo interacción

Esta es la segunda entrega del tutorial Corona SDK Match Shapes. En el tutorial de hoy, agregaremos a la interfaz y la interacción del juego programando el algoritmo de coincidencia de formas. Sigue leyendo!


También disponible en esta serie:

  1. Crea un juego Match Shapes - Creación de interfaz
  2. Construye un juego Match Shapes - Añadiendo interacción

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) transition.to (creditsView, time = 300, y = display. contentHeight - 25, 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) fin

Paso 4: Mostrar vista de juego

Cuando el Jugar 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..

 -- Fondo del juego gameBg = display.newImage ('gameBg.png', 10, 350)

Paso 6: Coloque los titulares

Los marcadores de posición son gráficos de fondo que se utilizan para representar a dónde se deben arrastrar las formas reales. Las siguientes líneas las crean y las colocan en el escenario..

 -- Marcadores de posición sHolder = display.newImage ('sHolder.png', 15, 130) pHolder = display.newImage ('pHolder.png', 115, 130) tHolder = display.newImage ('tHolder.png', 215, 130)

Paso 7: Instrucciones

Un mensaje de instrucciones será animado cuando el juego comience. Puede cambiar el tiempo que aparece cambiando el PerformWithDelay () código.

 -- Instrucciones ins = display.newImage ('instructions.png', 45, 270) transition.from (ins, time = 200, alpha = 0.1, onComplete = function () timer.performWithDelay (2000, function () transition.to ( ins, time = 200, alpha = 0.1, onComplete = function () display.remove (ins) ins = nil end) end) fin

Paso 8: Formas

Las formas que se utilizarán se crean en las siguientes líneas de código.

 -- Formas square = display.newImage ('square.png', 240, 386) pentagon = display.newImage ('pentagon.png', 32, 386) triangle = display.newImage ('triangle.png', 131, 386) square .name = 'square' pentagon.name = 'pentagon' triangle.name = 'triangle' gameListeners () final

Paso 9: Oyentes del juego

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

 function gameListeners () function gameListeners () square: addEventListener ('touch', dragShape) triángulo: addEventListener ('touch', dragShape) pentágono: addEventListener ('touch', dragShape) end

Paso 10: Hit Test Objects

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 CoronaLabs Code Exchange.

 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 11: Arrastrar las formas

Esta es la función principal de este juego: controla el arrastre del objeto al verificar la posición del objeto y moverlo a la posición del evento..

 función dragShape (e) si (e.phase == 'comenzó') luego lastX = ex - e.target.x lastY = ey - e.target.y elseif (e.phase == 'moved') luego e.target .x = ex - lastX e.target.y = ey - lastY

Paso 12: Colisión Cuadrada

Esta última función también contiene código que verifica si la forma está en el lugar correcto. Esta es la parte cuadrada..

 elseif (e.target.name == 'cuadrado' y e.phase == 'terminó' y hitTestObjects (e.target, sHolder)) luego e.target.x = 60.5 e.target.y = 175 e.target: removeEventListener ('touch', dragShape) correcto = correcto + 1 audio.play (correctSnd)

Paso 13: Colisión de triángulo

El mismo método se utiliza para el triángulo. Si la forma correcta se coloca en el lugar correcto, se elimina el oyente de arrastre de forma.

 elseif (e.target.name == 'triángulo' y e.phase == 'terminó' y hitTestObjects (e.target, tHolder)) luego e.target.x = 260 e.target.y = 169 e.target: removeEventListener ('touch', dragShape) correcto = correcto + 1 audio.play (correctSnd)

Paso 14: Colisión del Pentágono

Esta es la parte del pentágono. Si la forma correcta toca el lugar correcto cuando el toque el evento finaliza, la forma se alinea con el centro del marcador de posición.

 elseif (e.target.name == 'pentágono' y e.phase == 'terminó' y hitTestObjects (e.target, pHolder)) luego e.target.x = 160 e.target.y = 172 e.target: removeEventListener ('touch', dragShape) correct = correct + 1 audio.play (correctSnd) end

Paso 15: Revisa para completar

Finalmente, verificaremos si las tres formas se han colocado correctamente, y luego reproduciremos un sonido y llamaremos una alerta si es correcto.

 si (e.phase == 'terminó' y correcto == 3) entonces audio.stop () audio.play (winSnd) alert () end end end

Paso 16: Alerta

La función de alerta crea una vista de alerta, la anima y finaliza el juego..

 función alert () alertView = display.newImage ('win.png', 95, 270) transition.from (alertView, time = 200, alpha = 0.1) end

Paso 17: 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, podemos hacerlo aquí:

 Principal()

Paso 18: Cargando pantalla

El archivo Default.png es una imagen que se muestra cuando inicia la aplicación mientras que iOS carga los datos básicos para mostrar la pantalla principal. Añade esta imagen a la carpeta de origen de tu proyecto. Será automáticamente agregado por el compilador Corona..


Paso 19: Icono

Usando los gráficos creados anteriormente, ahora puedes crear un ícono 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 resplandor transparente, iTunes y el iPhone lo harán por ti.


Paso 20: Pruebas en simulador

Es hora de 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 último paso!


Paso 21: Construir

En el simulador de corona, ve 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 esta serie, aprendió sobre el arrastre de objetos y la detección de colisiones sin utilizar el motor de física. Esto puede reducir el consumo de memoria de la aplicación y aumentar el rendimiento. Puedes experimentar con el resultado final e intentar hacer tu versión personalizada del juego.!

Espero que hayas disfrutado esta serie de tutoriales y te haya resultado útil. Gracias por leer!