Este tutorial le mostrará cómo trasladar un juego Flash / Flex al Corona SDK. Específicamente, estaremos portando de ActionScript a Lua, con el objetivo final de jugar juegos anteriormente solo para Flash en el iPhone. Además de demostrar las diferencias de idioma y API, esta serie de tutoriales también tendrá en cuenta las restricciones de hardware, como el tamaño de la pantalla y la falta de botones físicos en el iPhone..
Antes de entrar en la codificación real, me gustaría dar una visión general rápida del software que haremos
estar usando Corona SDK es un producto de Ansca Mobile para la creación de juegos para iPhone, iPod Touch, iPad y dispositivos Android. Al momento de escribir este artículo, hay una versión de prueba gratuita e ilimitada del kit disponible aquí. Incluye toda la funcionalidad de la versión de pago, excepto la publicación en las tiendas de aplicaciones respectivas de los dispositivos iPhone y Android. Este tutorial hará una gran introducción al poder y la eficiencia de Corona..
En este tutorial, portaremos un juego impulsado por flixel de Andreas Zecher. Este juego fue creado con el tutorial de Andreas sobre la biblioteca de código abierto de flixel y el lenguaje ActionScript. El código original está disponible aquí (Andreas tuvo la amabilidad de lanzarlo como fuente abierta). Si estás interesado en hacer juegos flash, asegúrate de revisar el tutorial original. Hay información realmente útil allí!
El kit de desarrollo de software de Ansca Mobile usa el lenguaje de programación lua y extiende su API. Lua es un lenguaje muy limpio. Mientras atiendo a los principiantes, he encontrado que es muy potente con muy poco código. Lua no es un
lenguaje orientado a objetos, pero se puede hacer que siga el modelo orientado a objetos con algunos ajustes finos.
Dicho esto, echemos un vistazo a nuestro primer obstáculo: Lua es sintácticamente diferente de ActionScript..
Las variables en Lua se manejan de manera diferente que en ActionScript. En ActionScript, las variables se escriben estáticamente. Esto significa que declaran su tipo y solo almacenan valores de ese tipo a menos que se conviertan explícitamente.
? Variedad privada: barco; // Las variables declaran su tipo. Esta variable es de tipo "Ship" private var _aliens: FlxGroup; privado var _bullets: FlxGroup; private var _scoreText: FlxText; private var _gameOverText: FlxText; private var _spawnTimer: Number; private var _spawnInterval: Number = 2.5;?
En lua, las variables son tipificadas dinámicamente. Una variable Lua puede contener cualquier tipo en cualquier momento. Otro
Lo que hay que notar es que las variables en Lua son locales o globales. Una variable es local
(solo accesible) a su archivo .lua o su función, etc. si tiene el prefijo "local" en el
Declaración de la variable. De lo contrario, se considera "global" en su alcance. La mejor práctica en Lua es usar siempre
variables locales. Este tutorial se adherirá a esa práctica..
? _ship local - Las variables no declaran su tipo. Esta variable podría ser un "Envío" o podría ser una cadena. Más tarde, podría utilizarse para almacenar un entero o una matriz. local _aliens local _bullets local _scoreText local _gameOverText local _spawnTimer = nil - Esta variable tiene una asignación y una declaración en la misma línea. local _spawnInterval = 2.5 - Esto también lo hace?
Como probablemente ya haya notado, los comentarios se manejan de manera diferente en Lua que en ActionScript.
// Este es un comentario en ActionScript / * Este es un comentario multilínea en ActionScript * /
-- Este es un comentario en lua - [[Este es un comentario multilínea en lua -]]
Una cosa importante que se debe saber sobre los comentarios en Lua es que todo después de "-" es un comentario, excepto
para "--[[". Esto permite un buen truco. Si agrega un guión extra al principio de la multilínea
comente "--- [[", comenta la parte multilínea hacia fuera. Esto sucede porque todo después de la primera.
Dos guiones es un comentario. Ahora mira el comentario final "-]]". Ya es un comentario porque también
es despues de dos guiones. Esto efectivamente se convierte en un interruptor para apagar y encender bits de código.!
--[[Esto es un comentario -]] --- [[Este es un código y se ejecutará como tal. En este caso, se lanzaría un error. -]]
Los bucles, los corchetes y los operadores están definidos por palabras en Lua:
// ActionScript if (_spawnTimer < 0) spawnAlien(); resetSpawnTimer();
-- lua si (_spawnTimer < 0) then spawnAlien() resetSpawnTimer() end
Lua usa "if-then", "else", "elseif-then", "end", "and", "or", etc. También nota que Lua no usa
punto y coma para terminar cada línea. Sin todos los corchetes y puntos y comas, el código de Lua parece mucho más
Como el idioma inglés que otros lenguajes de programación..
Una cosa más a tener en cuenta antes de comenzar es que Lua no tiene soporte para accesos directos de asignación.
// ActionScript _spawnInterval * = 0.95; // Esto está permitido en ActionScript
-- lua _spawnInterval * = 0.95: esto generará un error en lua _spawnInterval = _spawnInterval * 0.95: este es el código Lua correcto
Ahora que entendemos algunas de las diferencias fundamentales entre ActionScript y Lua, podemos comenzar la
Proceso de transferencia del juego entre ellos. El código fuente de este tutorial y adjunto a esta publicación incluye el
Código fuente original y código terminado para el proyecto de hoy..
Para facilitar la portabilidad en el futuro, comenzaremos por convertir toda la sintaxis en nuestra fuente
Archivos, sin importarnos con la lógica de la aplicación real. De esta manera, cuando empezamos a trabajar en la lógica, el
El código ya estará formateado correctamente. Comencemos el proceso con el archivo Main.as, que se ve
algo como esto:
paquete import org.flixel. *; importar de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Frame (factoryClass = "Preloader")] public class Main extiende FlxGame función pública Main (): void super (640, 480, PlayState, 1);
No hay mucho que hacer aquí. No necesitamos la declaración del "paquete", por lo que podemos eliminar las líneas superior e inferior del código.
importar org.flixel. *; importar de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Frame (factoryClass = "Preloader")] public class Main extiende FlxGame función pública Main (): void super (640, 480, PlayState, 1);
Como Lua no tiene clases, podemos eliminar la línea "clase pública principal extiende FlxGame" y es
corchetes correspondientes.
importar org.flixel. *; importar de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Frame (factoryClass = "Preloader")] función pública Main (): void super (640, 480, PlayState, 1);
Ahora podemos trabajar en la función Main (). En primer lugar, observe la declaración "pública" del método..
Lua no tiene tipos de función separados, por lo que podemos eliminar eso. Recuerda que en lua, funciones.
No declare su tipo de devolución. Hay una palabra clave ": void" al final de la declaración de función.
Esto significa que esta función no devolverá un valor, que no es necesario en lua. Para que podamos caer
eso. Es posible que desee comentarlo como referencia más adelante. Por último, retire los soportes alrededor
Principal(). En lua, usamos palabras. Añadir "final" al final de la función.
importar org.flixel. *; importar de.pixelate.flixelprimer. *; [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] [Frame (factoryClass = "Preloader")] función principal () -: void super (640, 480, PlayState, 1); fin
Para envolver las cosas, elimine todos los puntos y coma ";" Y comenta todas las líneas de código. Esta
De esta forma, podemos comenzar a portar la lógica sin errores..
--importar org.flixel. * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] - función Main () -: void - super (640, 480, PlayState, 1) --end
En este punto, querrá crear una carpeta de proyecto para guardar sus archivos. Llamé al mío
"alien_shooter". Esta es la carpeta que pasará a Corona cuando esté listo para ejecutar su
código. Dentro de la carpeta, Corona busca el archivo "main.lua". Corona es sensible a las mayúsculas, por lo que
no debe escribir en mayúscula la primera letra como en "Main.as". Guarde el código anterior como main.lua.
Vamos a pasar al siguiente archivo. Hoy, solo trabajaremos con dos de los archivos de origen. El segundo
el archivo se encuentra en "de / pixelate / flixelprimer / PlayState.as" en el código fuente adjunto. Este archivo es donde
Se maneja todo el juego. Como tal, es el archivo más largo. Modificaremos la sintaxis en pequeños trozos..
Al igual que el archivo principal, este código tiene un paquete y una declaración de clase. Eliminar las líneas que comienzan.
con "package" y "public class PlayState" y sus paréntesis.
Ahora vemos una lista de variables locales..
? Variedad privada: barco; privado var _aliens: FlxGroup; privado var _bullets: FlxGroup; private var _scoreText: FlxText; private var _gameOverText: FlxText; private var _spawnTimer: Number; private var _spawnInterval: Number = 2.5;?
Recuerde antes que las variables en Lua son locales o globales, y que no es necesario
Declara su tipo. Modifica las variables para que se vean así:
? _ship local; extranjeros locales; _bullets locales; local _scoreText; local _spawnInterval = 2.5;?
Ahora, desplácese hacia abajo en la lista de declaraciones de funciones, comenzando con create (). Elimine todas las declaraciones de tipo de función, como "público"
o "anular público". Comente o elimine todos los tipos de devolución para las funciones. Casi todas estas funciones son ": void". Reemplace los soportes de la función con "final". Crear () ahora debería verse así:
? function create () -: void FlxG.score = 0; bgColor = 0xFFABCC7D; _ship = nueva nave (); añadir (_ship); _aliens = new FlxGroup (); add (_aliens); _bullets = new FlxGroup (); añadir (_bullets); _scoreText = new FlxText (10, 8, 200, "0"); _scoreText.setFormat (null, 32, 0xFF597137, "left"); añadir (_scoreText); resetSpawnTimer (); super.create (); fin?
Cuando llegamos a funciones como update (), también tenemos que lidiar con sentencias if-then. Sólo
Reemplace el soporte de apertura "" con "luego", y el soporte de cierre "" con "final". Cualquier "&&" debería
ser reemplazado por "y". "||" debe ser reemplazado con "o".
? function update () -: void FlxU.overlap (_aliens, _bullets, overlapAlienBullet); FlxU.overlap (_aliens, _ship, overlapAlienShip); if (FlxG.keys.justPressed ("SPACE") y _ship.dead == false) luego spawnBullet (_ship.getBulletSpawnPosition ()); end if (FlxG.keys.ENTER y _ship.dead) luego FlxG.state = new PlayState (); end _spawnTimer - = FlxG.elapsed; si (_spawnTimer < 0) then spawnAlien(); resetSpawnTimer(); end super.update(); end?
Algunas funciones, como overlapAlienBullet (), toman argumentos. En ActionScript, tenemos que declarar el tipo de argumentos que vamos a pasar. La función overlapAlienBullet () toma una variable "alien" (de tipo Alien) y una variable llamada "bullet" (de tipo Bullet). Estas declaraciones de tipo deben ser eliminadas. Además, overlapAlienBullet () tiene variables locales. Eliminar las declaraciones de tipo de estos también. Nota: las declaraciones de variables locales deben tener la palabra clave local antes que ellas.
Antes de:
? función privada overlapAlienBullet (alien: Alien, bullet: Bullet): void var emitter: FlxEmitter = createEmitter (); emitter.at (extranjero); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); ?
Después:
? function overlapAlienBullet (alien, bullet) -: void local emitter = createEmitter (); emitter.at (extranjero); alien.kill (); bullet.kill (); FlxG.play (SoundExplosionAlien); FlxG.score + = 1; _scoreText.text = FlxG.score.toString (); fin?
La última función, createEmitter (), tiene una declaración for-do. No utilizaremos esta función.
en el juego final, pero deberíamos echar un vistazo a esta declaración:
para (var i: int = 0; i < particles; i++) var particle:FlxSprite = new FlxSprite(); particle.createGraphic(2, 2, 0xFF597137); particle.exists = false; emitter.add(particle);
La línea superior del código crea una variable "i" con un valor de 0. El código entre corchetes se repite
en sí mismo, mientras que "i" es menor que la variable "partículas". Cada bucle, la variable "i" obtiene
incrementado en 1.
para i = 0, partículas-1 hacer? fin
La declaración Lua anterior crea una variable "i" con un valor de 0. El código entre paréntesis
se repite hasta que "i" sea igual a la variable "partículas" menos 1 (lo mismo que se comprueba si "i"
es menor que "partículas"). La variable "i" también se incrementa en 1 cada bucle.
Ahora podemos terminar tratando solo con la sintaxis. Eliminar todos los puntos y comas. Comenta todo el código como
con el archivo principal. Agregar comentarios de una sola línea antes de líneas individuales de código.
--local _ship --local _aliens --local _bullets --local _scoreText --local _spawnInterval = 2.5
Agregue comentarios multilínea alrededor de funciones y trozos de código.
--[[create create () -: void FlxG.score = 0 bgColor = 0xFFABCC7D _ship = new Ship () add (_ship) _aliens = new FlxGroup () add (_aliens) _bullets = new FlxGroup () add (_bullets) _scoreText = nuevo FlxText (10, 8, 200, "0") _scoreText.setFormat (nulo, 32, 0xFF597137, "izquierda") agregar (_scoreText) resetSpawnTimer () super.create () final -]]
Continúe y guarde este archivo como PlayState.lua en la carpeta de su proyecto. No lo pongas en un subdirectorio.
Me gusta el código fuente. Corona tiene problemas con los módulos en subdirectorios..
Ahora estamos listos para comenzar a trasladar la lógica detrás de este juego. Vamos a hablar de la lógica del archivo primero.
En nuestra fuente de ActionScript, el archivo Main.as se ejecuta primero. Los otros archivos, como
PlayState.as, se llaman paquetes. Estos paquetes se importan en el archivo principal. En lua, la
El archivo main.lua se ejecuta primero. Los otros archivos se conocen como módulos y se requieren en el
archivo principal. En ActionScript, los paquetes tienen una declaración de paquete. En Lua, los módulos también deben tener un
Declaración, o el archivo principal no puede verlos. Esto significa que necesitamos modificar nuestro archivo PlayState.lua.
En la parte superior del archivo, o en cualquier otro archivo de módulo, agregue esta línea para que main.lua pueda trabajar con el
módulo.
módulo (?, package.seeall)
Ahora vuelva al archivo main.lua para que podamos cargar nuestro módulo. Debería verse así:
--importar org.flixel. * --import de.pixelate.flixelprimer. * - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] - función Main () -: void - super (640, 480, PlayState, 1) --end
Vemos que el código original de ActionScript importó todos los paquetes en "org / flixel" y en
"de / pixelate / flixelprimer". Reemplace esas líneas para hacer esto:
local PlayState = require ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] --function Main () -: void - super (640, 480, PlayState, 1) --end
Este código crea una nueva variable (que es local al archivo principal) para contener el módulo requerido. Nosotros
ahora puede acceder a cualquiera de los códigos del archivo PlayState.lua desde la variable "PlayState".
Antes de continuar con main.lua, debemos realizar algunos cambios en PlayState.lua. Si miramos el
archivo original PlayState.as, vemos que todas las funciones están envueltas dentro de una clase
llamado PlayState. No podemos crear clases con lua, pero podemos organizar nuestro código de manera que podamos
orientado a objetos. Al envolver toda la funcionalidad con una función de constructor, podemos lograr
el mismo efecto Manteniendo todo su código comentado, agregue estas líneas alrededor de todo el código.
Funcion PlayState ()? código va aquí? fin
Ahora, todas las funciones serán locales a la función PlayState. Estas funciones se vuelven privadas para
una especie de instancia de PlayState que se crea cuando se llama a PlayState (). Si quisieras imitar a un
método de clase, podría poner la declaración fuera de la función. Aprenderemos en lecciones posteriores.
cómo crear métodos de instancia aquí también.
Aquí hay un módulo de ejemplo que demuestra esta funcionalidad:
módulo (?, package.seeall) local numberOfInstances = 0 - esta función imita una función de método de clase getNumberOfInstances () devuelve numberOfInstances fin - esta función imita una función de clase Instance () instancia local = numberOfInstances = numberOfInstances + 1 local instanceNumber = numberOfInstances: esta función imita una función de método de instancia Instance: getInstanceNumber () return instanceNumber end - esta función imita una función de método privado create () return Instance end - esto llama al método privado una vez que todas las funciones han sido declaradas return crear () final
Si desea jugar con el código anterior, aquí hay un archivo main.lua que demuestra el uso (asumiendo que
El módulo se guarda como test.lua):
prueba local = requerir ("prueba") instancia local1 = prueba.Instancia () instancia local2 = prueba.Instancia () instancia local3 = prueba.Instancia () instancia local4 = prueba.Instancia () imprimir (test.getNumberOfInstances ()) imprimir (instance2: getInstanceNumber ())
Observe que las funciones del módulo utilizan la sintaxis de puntos, mientras que todas las demás funciones de Lua (e incluso algunas de
sus declaraciones como acabamos de ver) usan dos puntos (:) en lugar del punto. Esto puede ser confuso, como
Se accede a las propiedades en Lua usando la sintaxis de puntos. Debido a esto, dejamos todas las llamadas de función
solo al portar la sintaxis anterior. Decidiremos si usar un punto o dos puntos para cada caso
nos encontramos.
Ahora que tenemos toda la funcionalidad en PlayState.lua dentro de la función PlayState (), todos
las funciones ahora están imitando funciones privadas en ActionScript. Que es exactamente
lo que nosotros queremos. Agrega una variable local de PlayState en la parte superior de la función.
función PlayState () local PlayState = ? fin
Ahora, siga adelante y descomente la función create () y muévala a la parte inferior (justo antes
el final final). Agregue comentarios de una sola línea a todas las líneas dentro de la función, por lo que aún podemos
Ver la lógica, pero no arroja ningún error..
módulo (?, package.seeall) función PlayState () local PlayState = ? un montón de código comentado? function create () -: void --FlxG.score = 0 --bgColor = 0xFFABCC7D --_ ship = new Ship () --add (_ship) --_ aliens = new FlxGroup () --add (_aliens) - _bullets = new FlxGroup () --add (_bullets) --_ scoreText = new FlxText (10, 8, 200, "0") --_ scoreText.setFormat (null, 32, 0xFF597137, "left") --add (_scoreText ) --resetSpawnTimer () --super.create () end end
El juego original de ActionScript fue construido usando la biblioteca de flixel discutida al principio de este
lección. Desafortunadamente, no hay Lua puerto de flixel a partir de este escrito. Entonces, estaremos
implementando toda la lógica de flixel con la API de Corona SDK.
Lo primero a tener en cuenta, es volver al archivo main.lua. En flixel, la función Main () automáticamente.
se llama cuando se ejecuta el programa. En Corona, el archivo main.lua se ejecuta de arriba a abajo..
Entonces, para lograr el mismo efecto que en la fuente, agregue Main () al final de main.lua.
local PlayState = require ("PlayState") - [SWF (width = "640" ,, backgroundColor = "# ABCC7D")] - [Frame (factoryClass = "Preloader")] function Main () -: void - - super (640, 480, PlayState, 1) final Main ()
Además, en la mayoría de los juegos de flixel, se muestra un precargador con el logotipo de flixel mientras el programa está
cargando. No necesitamos eso para nuestra aplicación, por lo que no haremos un archivo preloader.lua. Las líneas sumando
El preloader y la configuración del tamaño / fondo del programa se pueden eliminar (no podemos cambiar la aplicación
tamaño).
local PlayState = requiere ("PlayState") función principal () -: void - super (640, 480, PlayState, 1) final principal ()
Mientras estamos aquí, crea un nuevo PlayState en Main ().
Local PlayState = requiere ("PlayState") función principal () -: void PlayState.PlayState () final principal ()
Al regresar a PlayState.lua, notamos que no se está llamando a create (). En flixel, crea () y
La actualización () se maneja automáticamente. Tendremos que cuidarlos nosotros mismos en Corona. Agrega un
Llama a create () antes del último final..
módulo (?, package.seeall) función PlayState () local PlayState = ? un montón de código comentado? funcion create () -: void? comentado crear () lógica? end crea () end
Antes de continuar, echemos un vistazo a lo que tenemos hasta ahora. Ahora tenemos un archivo main.lua que
requiere PlayState.lua y ejecuta PlayState (). PlayState () crea una nueva instancia de PlayState y luego
llamadas crea (). Crear () es donde va todo el código de configuración del juego. Ahora tenemos un marco
para construir nuestra lógica alrededor.
Ahora debemos comenzar a agregar funciones a nuestra función create () para configurar nuestro juego. Vamos a empezar por
Creando el fondo de color verde del juego. En nuestro código, tenemos esta línea comentada en nuestro
crear () función.
--bgColor = 0xFFABCC7D;
Esto nos dice el valor hexadecimal para el color verde original. Una forma fácil de hacer un fondo.
En Corona es hacer un rectángulo de color del mismo tamaño que la pantalla. Esto se puede hacer usando
Objetos de visualización de la corona. Similar a ActionScript, Corona nos da una API para mostrar objetos a
la pantalla. Podemos usar el módulo de visualización para muchas tareas diferentes. Se puede utilizar para crear.
Nuevos objetos o grupos de objetos, o para encontrar el ancho / alto de la pantalla. Vamos a crear un nuevo
rectángulo y guardarlo como una propiedad de nuestra variable PlayState.
módulo (?, package.seeall) función PlayState () local PlayState = ? un montón de código comentado? function create () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight)? comentado crear () lógica? end crea () end
Aquí creamos un nuevo rectángulo de (0,0) a (el ancho de la pantalla, la altura de la pantalla) y almacenamos
En la variable _background. Pongo el guión bajo para imitar el código original. Todos
Las variables privadas en la versión de ActionScript del juego comienzan con un guión bajo..
_background es privado para cada instancia de PlayState, así que lo formateé como las otras variables.
Observe la sintaxis de puntos. Si recuerda algo anterior, esto significa que _background ahora es propiedad de
PlayState. Ya que creamos la variable PlayState fuera de la función create (), está disponible
Ahora a todas las funciones. Si hubiéramos creado PlayState dentro de create () de esta manera:
módulo (?, package.seeall) función PlayState () función create (): PlayState ahora es local para create () local PlayState = . PlayState todavía se puede usar en create, pero no está disponible afuera. PlayState._aNumber = 10 end function otherFunction () - Esto generará un error. otherFunction no sabe qué es PlayState. print (PlayState._aNumber) end create () otherFunction () end
No hubiéramos podido utilizarlo en otherFunction (). Desde que creamos PlayState al principio
de PlayState (), todas las funciones pueden usarlo.
Función del módulo (?, package.seeall) PlayState (): PlayState ahora es local de PlayState () PlayState local = La función create () (PlayState) (y sus propiedades) se puede usar en create y en cualquier otro lugar. PlayState._aNumber = 10 end function otherFunction () PlayState._aNumber = PlayState._aNumber + 4 - Esto imprimirá 14 print (PlayState._aNumber) end create () otherFunction () end
Si ejecuta el código con el nuevo rectángulo, verá un fondo blanco. Necesitamos cambiar su
Rellene el color hasta el verde. Para hacer esto necesitamos convertir el código hexadecimal (ABCC7D) a RGB, que es lo que
Corona utiliza para rellenar objetos de visualización. Puede pegar ese código en cualquiera de los hexágonos de los sitios web RGB..
El resultado será (171, 204, 125). Ahora use el método de instancia setFillColor (observe los dos puntos) en
PlayState._background.
módulo (?, package.seeall) función PlayState () local PlayState = ? un montón de código comentado? function create () -: void PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? comentado crear () lógica? end crea () end
Ahora tenemos el comienzo de un juego. Hagamos algunos cambios más antes de terminar el día..
Agreguemos una variable a cada instancia de PlayState para saber si el juego se está ejecutando o no.
módulo (?, package.seeall) función PlayState () local PlayState = ? un montón de código comentado? function create (): void PlayState._inGame = true PlayState._background = display.newRect (0, 0, display.contentWidth, display.contentHeight) PlayState._background: setFillColor (171, 204, 125)? comentado crear () lógica? end crea () end
Eso será muy útil más tarde. Vamos a deshacernos de la barra de estado en la parte superior del iPhone.
Solo queremos que esto se haga una vez cuando se inicie la aplicación, así que agréguelo a main.lua.
local PlayState = requiere ("PlayState") función principal () -: void display.setStatusBar (display.HiddenStatusBar) PlayState.PlayState () final Main ()
Otro paso importante al crear una aplicación Corona, es agregar un archivo de configuración que le dirá a Corona cómo
para escalar su aplicación en otras plataformas. En este tutorial, solo nos interesa el iPhone
Tamaño de la pantalla (aunque la aplicación también se ejecutará en Android). Crea un archivo llamado config.lua y rellénalo
con este.
application = content = width = 320, height = 480, scale = "letterbox",
Ahora nuestra aplicación se ejecutará en pantallas de retina también. Nota: este archivo funcionará con cualquier aplicación Corona.
Ahora tenemos un marco de trabajo para empezar a construir. Nuestra aplicación no parece mucho todavía, pero nosotros
He cubierto muchos de los pasos importantes en la transferencia de un idioma a otro. En el proximo
lección en esta serie comenzaremos a hacer un juego jugable.