Vistas de página en total

lunes, 18 de julio de 2016

Qué es Corona

Frank Zammetti, un experto desarrollador de videojuegos, dice al comienzo de uno de sus libros:

"Writing mobile apps is hard. Writing mobile games is even more so"
"Escribir applicaciones para móviles es duro. Escribir juegos para móviles es incluso más duro"

¿Por qué es tan difícil el desarrollo para móviles? El principal problema es lo que comenté en la entrada anterior: la diversidad de plataformas. Pero además, se añade otro problema adicional, al menos tan importante como éste: la diversidad de tamaños de pantalla, proporciones (ancho x alto), resoluciones, puntos por pulgada, etc de los distintos dispositivos y tablets que existen actualmente en el mercado.

Corona SDK es un framework para desarrollar aplicaciones para móviles multiplataforma. Está orientado al desarrollo de juegos 2D y de aplicaciones para móviles (aunque las últimas versiones también permiten el desarrollo para TV y para desktop). Está diseñado para que el desarrollo sea muy rápido (el número de líneas de código en Corona comparado con un desarrollo nativo con Swift o Java, está o suele estar, en un orden de magnitud por debajo, y el tiempo correspondiente para escribirlo suele ser equiparable).

Corona SDK utiliza el lenguaje de programación Lua. Un lenguaje similar a Javascript, aunque, en mi opinión, mas potente que éste y más seguro desde el punto de vista del programador. En cualquier caso, los programadores que conozcan Javascript, o incluso algún otro lenguaje de programación moderno (como Java, C#, etc) aprenderán Lua muy rápidamente.

Corona incluye un simulador muy potente que permite comprobar instantáneamente los cambios que se hacen en el código. Creo que este aspecto es fundamental y a mí me hizo decidirme por este framework. Si comparamos con el desarrollo nativo, XCode tiene que compilar la aplicación, cargarla en el simulador y entonces podremos verla. El caso de Android es mucho peor, ya que además de la compilación previa y carga en el emulador, la velocidad de los emuladores Android es realmente desesperante (a pesar de las mejoras que se han ido haciendo, tanto por parte de Google, como por parte del software de virtualización). Con Corona, cambiamos una línea de código, salvamos el fichero y automáticamente el simulador recarga en menos de un segundo la aplicación modificada. La única pega es que al tratarse de un simulador (distinto de un emulador), hay algunas funciones que no se pueden probar en el simulador, por ejemplo, el GPS, la publicidad, y algunas otras características que sólo podremos ver en el dispositivo. Corona genera un fichero .APK para Android y un fichero .IPA para iOS. Estos ficheros son perfectamente instalables en cualquier dispositivo, y también están preparados para subirse a una de las tiendas de aplicaciones.

El 99% del código escrito en Lua/Corona es común para Android e iOS. Aunque hay algunos temas que son muy específicos de cada plataforma, por ejemplo, el formato de los ficheros de audio. En estos casos, disponemos de métodos para comprobar cuál es la plataforma destino, e incluso, podemos saber si estamos ejecutando en el simulador.

Otras características de Corona SDK:


  • Corona es 100% gratuito. Podemos desarrollar una aplicación o juego desde el principio hasta su despliegue en las tiendas de aplicaciones sin pagar absolutamente nada. Existe una  versión comercial de corona, llamada Corona Enterprise, que permite llamar a código nativo. También es necesario contratar Corona Enterprise si nuestra aplicación obtiene unos ingresos superiores a 500,000 dólares (aunque en este caso yo no tendría ningún problema en pagar la suscripción).
  • Lua y Corona son muy sencillos de aprender. Los inicios con Lua son muy sencillos. El lenguaje en sí es muy sencillo, y además podemos ver inmediatamente nuestra aplicación en el simulador, e incluso en un dispositivo. Por otra parte, Corona trae un montón de ejemplos con su código fuente que tratan un montón de situaciones típicas que podemos copiar o que nos pueden servir de inspiración.
  • Corona soporta las siguientes plataformas: iOS, Android, Kindle, Windows Phone, Apple TV, Android TV, OSX y Windows Desktop.
  • El simulador de Corona se puede ejecutar tanto en Windows como en MacOS.
  • En Windows podemos generar aplicaciones para Android. En MacOS podemos generar aplicaciones tanto para Android como para iOS (esto es debido a que Apple obliga que se genere código para iOS únicamente desde un ordenador con MacOS). En cualquier caso, el código Lua desarrollado en Windows se puede llevar a un Mac y generar la versión con iOS, sin ningún cambio.
  • Corona tiene una amplia documentación y una comunidad muy activa, fundamentalmente porque los propios desarrolladores de Corona participan en los foros y blog:
Y ahora, algo que nos gusta mucho a los desarrolladores, vamos a ver qué es Corona en la práctica desde el punto de vista de desarrollo. Muy brevemente, para hacer un programa con Corona, simplemente abrimos un editor de texto, escribimos nuestro programa en uno o más ficheros Lua (uno de estos ficheros será main.lua), abrimos el fichero main.lua con el simulador de Corona y se ejecutará casi instantáneamente. Si queremos generar la versión para Android, o sea, un fichero APK, simplemente entramos en la opción Build del simulador y generamos el APK. Para iOS el proceso es similar, pero en este caso necesitamos tener algunos certificados de Apple, como ya veremos. En resumen, para hacer un programa con Corona, simplemente tenemos que tener instalado el simulador de Corona y un editor de texto.

En próximas entradas de este blog iremos profundizando en los diversos aspectos de Corona SDK: el lenguaje Lua, los APIs de Corona, despliegue tanto en Android como en iOS, etc. Pero antes de nada, empezaremos haciendo una sencilla aplicación en muy pocos minutos.







jueves, 14 de julio de 2016

Quiero hacer apps y juegos para móviles

Este blog va a estar dedicado a la programación de aplicaciones y juegos para móviles utilizando Corona SDK.

Desde que aparecieron los primeros smartphones, mucha gente ha tenido ideas para desarrollar un juego o una aplicación para estos dispositivos. Pero hay varios problemas a los que hay que enfrentarse, sobre todo si no se tiene mucha experiencia en este mundo del desarrollo para móviles.

El primer problema al que nos enfrentamos es que no existe una única plataforma o sistema operativo para móviles. Nos encontramos con al menos, dos grandes plataformas: iOS y Android. También podríamos incluir Windows Phone, pero a día de hoy, no está tan expandido como las otras dos.

Las aplicaciones para Android se desarrollan en Java y se utiliza Android Studio como IDE. Las aplicaciones para iOS se desarrollan en Swift (o bien en el antiguo Objective-C) y se utiliza XCode como IDE. Ambos entornos son completamente diferentes, tienen APIs muy distintos y requieren de una especialización importante para desarrollar aplicaciones o juegos de una complejidad media.

Podríamos pensar que lo mejor es centrarse en una de las plataformas, Android o iOS, especializarse en ella y desarrollar nuestra idea sólo para esa plataforma. Si con el paso del tiempo, empieza a tener éxito, habría que plantearse desarrollarla de nuevo para la otra plataforma. Esto tiene algunos inconvenientes: Nunca sabemos si nuestra idea va a tener éxito en una plataforma y quizás empecemos por la opción errónea, además, quizás el éxito está asociado al momento actual. Os voy a contar mi experiencia. Hace unos cuatro años, desarrollé un juego para Android (Retro Kong Jungle), tuvo un éxito inicial inesperado para mí. En pocos meses llegó a las 50000 descargas. Entonces me planteé desarrollarla de nuevo para iOS, pero la falta de tiempo para aprender el nuevo entorno y la inexperiencia, hicieron que esto se retrasara hasta 3 años. Cuando por fin me decidí a hacer el desarrollo del juego para iOS, me llevé la gran sorpresa que prácticamente no tiene descargas (Retro Kong Jungle). Conclusión, las cosas hay que hacerlas en su momento, no dejarlas para después. Si cuando desarrollé el juego inicialmente lo hubiera hecho para las dos plataformas, quizás la historia hubiera sido muy distina. Nunca lo sabré.

Una solución por la que optan algunos desarrolladores es la aplicación Web. Se trata desarrollar la aplicación y publicarla en un servidor web, pero haciéndola responsiva, es decir, adaptada a dispositivos móviles. Ésta no es una mala solución para algunas aplicaciones (por supuesto no para todas), y desde luego, no es válida en absoluto para juegos. Creo que este asunto, no merece más explicación.

Por suerte, existen herramientas multiplataforma, las cuales con una única base de código fuente, permiten el despliegue en múltiples plataformas móviles.

Pero hay muchas diferencias entre todas estas plataformas, y cada una tiene sus ventajas e inconvenientes si comparamos con implementar un desarrollo distinto para cada plataforma.

El primer tipo de herramientas está basado en HTML-Javascript-CSS. No se trata de aplicaciones web, si no de herramientas en las que se programa en estos lenguajes y generan una especie de navegador web embebido en la aplicación. A diferencia de la aplicación web de toda la vida, estas aplicaciones no se ejecutan online, si no que se ejecutan localmente. El código javascript que controla la aplicación lleva el flujo de toda la aplicación en el propio móvil, sin necesidad de conectarse a un servidor web para cargar las páginas. El ejemplo más típico de estas herramientas es PhoneGap. La gran ventaja de estas herramientas es que se utilizan lenguajes muy conocidos para los desarrolladores. El problema es que desde javascript no se puede acceder a todos los recursos nativos de cada plataforma, además no es una solución para desarrollar juegos.

Otro tipo de herramientas, como Xamarin, permite desarrollar en un único lenguaje de programación y ofrece unas librerías en cada plataforma de forma que el API sea común. También ofrecen otros APIs específicos de cada plataforma, y por lo tanto, casi siempre habrá que desarrollar un porcentaje, más o menos elevado de la aplicación, específicamente para cada plataforma. La gran ventaja es la utilización de un lenguaje de programación y de APIs comunes. Pero obliga a desarrollar partes de la aplicación para cada plataforma.

Por último, tenemos las herramientas que traducen el código fuente común a cada plataforma. Este es el caso de Corona SDK. En el caso de Corona, no se utilizan widgets nativos para la interfaz de usuario, sino que dibujan en la pantalla utilizando OpenGL. De esta forma, el resultado en cada plataforma es prácticamente igual. Lo cual es una ventaja, pero también se podría considerar un inconveniente, ya que los usuarios de cada plataforma están acostumbrados a utilizar ciertos widgets. Por ejemplo, una aplicación Corona que ponga un botón, tendrá el mismo aspecto tanto en Android como en iOS. La gran ventaja es que, además de utilizar un lenguaje común, se pueden desarrollar todo tipo de aplicaciones multiplataforma rápidamente, así como juegos.

Este blog está dedicado a Corona SDK, e iremos viendo poco a poco sus características. Haremos ejemplos desde lo más sencillo hasta aplicaciones completas. Aprenderemos el lenguaje de programación que utiliza. Y también, veremos algunas herramientas útiles que utilizaremos constantemente en el desarrollo para móviles: editores de texto, bitmaps, vectorial, audio, etc.

Espero que este blog os ayude a empezar en el mundo de la programación móvil de una forma sencilla y sobre todo, divertida. Yo creo que el desarrollo tiene que ser algo divertido. El programador que no se divierte programando, quizás debería reflexionar un poco sobre su trabajo, porque la programación es algo muy divertido, y si además, hacemos videojuegos, mucho más.

Por último, sólo una advertencia. Aunque voy a explicar el lenguaje de programación de Corona SDK, doy por supuesto que tenéis unos conocimientos mínimos de programación. No voy a explicar lo que es un if o un bucle. No hacer falta ser expertos programadores, pero sí hace falta cierta base mínima.