En esta serie de tres partes, te mostraré cómo crear un juego inspirado en el popular juego de los setenta, Space Invaders. A lo largo del camino, aprenderá acerca de la funcionalidad de administración de escenas de Corona, los temporizadores, el movimiento de un personaje, el motor de física incorporado y cómo usar módulos para emular clases en el lenguaje de programación Lua..
Abra el simulador de corona, haga clic en Nuevo proyecto, y configura el proyecto como se muestra abajo.
Seleccione una ubicación para guardar su proyecto y haga clic en DE ACUERDO. Esto creará una carpeta con una serie de iconos y tres archivos que son importantes para nosotros, main.lua, config.lua, y build.settings.
Vamos a echar un vistazo a cada archivo en los siguientes pasos.
los build.settings El archivo es responsable de las propiedades de tiempo de compilación del proyecto..
Abra este archivo, elimine su contenido y llénelo con la siguiente configuración.
configuraciones = orientación = predeterminado = "retrato", admitido = "retrato",,
En build.settings, Estamos configurando la orientación por defecto y restringiendo la aplicación.
Sólo para apoyar una orientación vertical. Puedes aprender que otras configuraciones puedes incluir en
build.settings explorando la documentación de la corona.
los config.lua El archivo maneja la configuración de la aplicación. Como hicimos con build.settings,
abra este archivo, elimine su contenido y agregue la siguiente configuración.
application = content = width = 768, height = 1024, scale = "letterbox", fps = 30,
Esto establece el ancho y la altura predeterminados de la pantalla, utiliza buzón para escalar las imágenes,
y establece la velocidad de fotogramas en 30. Visite la documentación de Corona para obtener más información sobre las otras propiedades que puede configurar en config.lua.
los main.lua archivo es el archivo que la aplicación carga primero y utiliza para iniciar la aplicación. Estaremos usando main.lua para establecer algunas configuraciones predeterminadas para la aplicación y usar el Compositor Biblioteca para cargar la primera pantalla..
Si no está familiarizado con la biblioteca de compositores de Corona, entonces recomiendo dar el
Documentación de una lectura rápida. En resumen, Composer es la solución integrada para la creación y gestión de escenas (pantallas) en Corona. La biblioteca proporciona a los desarrolladores una manera fácil de crear y hacer la transición entre escenas individuales.
El módulo Composer más nuevo reemplaza el anterior y ahora está en desuso StoryBoard módulo. Hay una guía de migración disponible para ayudar a convertir sus proyectos anteriores a usar Composer.
No queremos que la barra de estado aparezca en nuestra aplicación. Agregue el siguiente fragmento de código a main.lua para ocultar la barra de estado.
display.setStatusBar (display.HiddenStatusBar)
Para establecer el ancla o los puntos de registro predeterminados, agregue el siguiente bloque de código a main.lua.
display.setDefault ("anchorX", 0.5) display.setDefault ("anchorY", 0.5)
los anchorX
y ancla
las propiedades especifican dónde desea que esté el punto de registro de sus objetos de visualización. Tenga en cuenta que el valor va desde 0.0 a 1.0. Por ejemplo, si desea que el punto de registro sea la parte superior izquierda del objeto de visualización, debe establecer ambas propiedades en 0.0.
Nuestro juego utilizará Lua's. math.random
Función para generar números aleatorios. Para asegurarse de que los números son realmente aleatorios cada vez que se ejecuta la aplicación, debe proporcionar un valor semilla. Si no proporciona un valor semilla, la aplicación generará la misma aleatoriedad cada vez que.
Un buen valor semilla es el de Lua. os.time
función, ya que será diferente cada vez que el
Se ejecuta la aplicación. Agregue el siguiente fragmento de código a main.lua.
math.randomseed (os.time ())
Al usar Corona, y específicamente el lenguaje de programación Lua, una forma de tener acceso a las variables en toda la aplicación es usar global variables. La forma en que declara una variable global es dejando de lado la palabra clave local
frente a la declaracion de la variable.
Por ejemplo, el siguiente bloque de código declara dos variables. La primera es una variable local que solo estaría disponible en el bloque de código en el que se define. La segunda es una variable global que está disponible en cualquier parte de la aplicación..
local iamalocalvariable = "local" iamaglobalvariable = "global"
Generalmente se considera una mala práctica usar variables globales. La razón más frecuente es evitar conflictos de nombres, es decir, tener dos variables con el mismo nombre. Podemos resolver este problema utilizando módulos. Crea un nuevo archivo Lua, llámalo gamedata.lua, y añádele el siguiente código.
M = retorno M
Simplemente creamos una tabla y la devolvemos. Para utilizar esto, usamos Lua's. exigir
método. Agregue lo siguiente a main.lua.
local gameData = require ("gamedata")
Entonces podemos agregar claves a datos del juego
, cual sera el falso global variables Echa un vistazo al siguiente ejemplo..
gameData.invaderNum = 1: se utiliza para realizar un seguimiento del nivel en el que estamos en gameData.maxLevels = 3: número máximo de niveles que el juego tendrá gameData.rowsOfInvaders = 4: cuántas filas de invasores crear
Cuando queremos acceder a estas variables, todo lo que tenemos que hacer es usar el exigir
función para cargar gamedata.lua. Cada vez que cargues un módulo usando los de Lua. exigir
función, agrega el moduloa un paquete.loaded
mesa. Si carga un módulo, el paquete.loaded
La tabla se verifica primero para ver si el módulo ya está cargado. Si es así, entonces usa el módulo en caché en lugar de cargarlo nuevamente.
Antes de que podamos usar el módulo Composer, primero debemos exigirlo. Agregue lo siguiente a main.lua.
compositor local = require ("compositor")
Agregue el siguiente fragmento de código a main.lua. Esto hará que la aplicación vaya a la escena nombrada. comienzo, que también es un archivo Lua, start.lua. No necesita adjuntar la extensión de archivo al llamar al gotoScene
función.
composer.gotoScene ("inicio")
Crear un nuevo archivo Lua llamado start.lua En el directorio principal del proyecto. Este será un archivo del compositor, lo que significa que debemos requerir el módulo Compositor y crear una escena del compositor. Agregue el siguiente fragmento de código a start.lua.
compositor local = requiere ("compositor") escena local = compositor.newScene () escena devuelta
La llamada a nuevoScene
hace start.lua parte de la jerarquía de escena del compositor. Esto significa que se convierte en una pantalla dentro del juego, a la que podemos llamar métodos de composición en.
De aquí en adelante, el código añadido a start.lua debe colocarse encima del regreso
declaración.
Las siguientes son las variables locales que necesitaremos para el comienzo escena.
local startButton: se utiliza para iniciar el juego local pulsatingText = require ("pulsatingtext") - Un módulo que proporciona un efecto de texto pulsante local starFieldGenerator = require ("starfieldgenerator") - Un módulo que genera el starFieldGenerator local starGenerator - Una instancia del starFieldGenerator
Es importante entender que las variables locales en la parte principal solo se llaman una vez,
Cuando la escena se carga por primera vez. Al navegar por las escenas del compositor, por ejemplo, invocando métodos como gotoScence
, Las variables locales ya estarán inicializadas..
Es importante recordar esto si desea que las variables locales se reinicialicen cuando
Navegando de vuelta a una escena particular. La forma más sencilla de hacerlo es eliminar la escena de la jerarquía del compositor llamando al removeScence
método. La próxima vez que navegue a esa escena, se volverá a cargar automáticamente. Ese es el enfoque que vamos a tomar en este tutorial..
lospulsandoTexto
y starFieldGenerator
Son dos módulos personalizados que crearemos para agregar una funcionalidad similar a una clase al proyecto. Crea dos nuevos archivos en tu carpeta de proyecto llamada pulsatingtext.lua y starfieldgenerator.lua.
Si se ha tomado el tiempo de leer la documentación de Composer, a la que he vinculado anteriormente,
Habrá notado que la documentación incluye una plantilla que contiene todos los
Evento compositor. Los comentarios son muy útiles ya que indican qué eventos aprovechar para inicializar activos, temporizadores, etc. Estamos interesados en el escena: crear
, escena: show
, y escena: ocultar
métodos para este tutorial.
escena: crear
Agregue el siguiente fragmento de código a start.lua.
escena de la función: crear (evento) grupo local = self.view startButton = display.newImage ("new_game_btn.png", display.contentCenterX, display.contentCenterY + 100) group: insert (startButton) end
Este método se llama cuando la vista de la escena aún no existe. Aquí es donde debe inicializar los objetos de visualización y agregarlos a la escena. los grupo
la variable está apuntando a autoevaluación
, el cual es un GroupObject
para toda la escena.
Creamos el botón de inicio
usando el Monitor
objetos nueva imagen
método, que toma como parámetros el camino a la imagen y la X
y y
Valores para la posición de la imagen en pantalla..
escena: show
Compositor escena: show
El método tiene dos fases. los será La fase se llama cuando la escena aún está fuera de la pantalla, pero está a punto de aparecer en la pantalla. los hizo Se llama fase cuando la escena está en pantalla. Aquí es donde desea agregar código para hacer que la escena cobre vida, iniciar temporizadores, agregar escuchas de eventos, reproducir audio, etc..
En este tutorial solo nos interesa el hizo fase. Agregue el siguiente fragmento de código a start.lua.
escena de la función: show (evento) local phase = event.phase local previousScene = composer.getSceneName ("previous") if (previousScene ~ = nil) luego composer.removeScene (previousScene) end if (phase == "did") luego startButton : addEventListener ("tap", startGame) end end end
Declaramos una variable local. fase
, que utilizamos para comprobar qué fase del espectáculo
El método está en. Ya que volveremos a esta escena más adelante en el juego, verificamos si hay una escena anterior y, si es así, la eliminamos. Añadimos un grifo oyente al botón de inicio
que llama al empezar juego
función.
escena: ocultar
Compositor escena: ocultar
El método también tiene dos fases. los será La fase se llama cuando la escena está en pantalla, pero está a punto de salir de la pantalla. Aquí querrá detener los temporizadores, eliminar los escuchas de eventos, detener el audio, etc. hizo fase se llama una vez que la escena ha salido de la pantalla.
En este tutorial, solo nos interesa el será fase en la que eliminamos el grifo oyente de la botón de inicio
.
escena de la función: ocultar (evento) fase local = evento.fase si (fase == "será") luego startButton: removeEventListener ("tap", startGame) end end
los empezar juego
La función se llama cuando el usuario toca el botón de inicio
. En esta función, invocamos el gotoScene
Método compositor, que nos llevará a la nivel de juego escena.
function startGame () composer.gotoScene ("gamelevel") end
Crear un nuevo archivo llamado gamelevel.lua y añádele el siguiente código. Esto debería parecer familiar. Estamos creando una nueva escena y regresándola..
compositor local = requiere ("compositor") escena local = compositor.newScene () escena devuelta
Necesitamos agregar oyentes de escena para el crear
, espectáculo
, y esconder
metodos Agregue el siguiente código a start.lua.
scene: addEventListener ("create", scene) scene: addEventListener ("show", scene) scene: addEventListener ("hide", scene)
Si prueba el juego ahora, debería ver una pantalla negra con un botón que puede tocar. Pulsando el botón deberás llevarte a la nivel de juego escena, que ahora es sólo una pantalla en blanco.
Esto cierra esta parte de la serie. En la siguiente parte, comenzaremos a implementar el juego del juego. Gracias por leer y nos vemos en la segunda parte de esta serie..