Desarrollo de videojuegos para plataforma móvil

mobileGames.jpg

Desarrollar un videojuego es una tarea multidisciplinar. Además de los conocimientos de propios de programación se necesitan conocimientos de diseño, edición gráfica, sonido, animación, etc. Esto hace que muchos programadores que empiezan un videojuego acaben por no terminarlo.

Android ofrece herramientas para la creación de aplicaciones, aunque éstas son muy diferentes a los videojuegos, En las aplicaciones normalmente hay un flujo por el cual el usuario va navegando por diferentes  páginas o menús eligiendo las opciones que desea. En los videojuegos hay mucha más acción: normalmente  constan de una pantalla por la cual el personaje va recorriendo el nivel, formado por diferentes capas de texturas, fondos y enemigos. En dichas pantallas hay corriendo innumerables hilos de ejecución, desde el propio hilo de pintado, el hilo maestro del juego, hasta los hilos de ejecución de los personajes del juego, además  hay que controlar multitud de eventos en tiempo real, desde que un personaje no se salga del área asignada hasta controlar cuando se ha matado al personaje, etc. Al mismo tiempo hay que manejar los sonidos y las propias animaciones de los personajes, en función de qué acción estén ejecutando o la dirección en que se estén moviendo.

Los frameworks de desarrollo de videojuegos, comúnmente llamados motores gráficos, facilitan enormemente la tarea de manejar todos esos eventos y ofrecen métodos para facilitar el vector de  movimiento, la velocidad, animaciones, etc. En este artículo nos vamos a centrar en los motores gráficos open source, ya que son completamente gratuitos y disponen de una activa y amplia comunidad que crea códigos de ejemplo y se ayuda mutuamente a través  los foros.

Motores gráficos open source:

En el mercado existen diferentes frameworks o motores gráficos de código abierto, como por ejemplo AndEngine (java), Cocos 2d (C++) o Libgdx (java). Todos ellos facilitan la tarea de programación de videojuegos al contar con cientos de rutinas para el manejo de los elementos propios de un videojuegos, y ofrecen, en algunos casos, editores de niveles y gráficos para evitar que tengamos que programar a mano la posición de las texturas.

Fragmentación de Android.

Uno de los problemas mas comunes cuando se desarrolla una aplicación móvil, es la fragmentación del sistema operativo. En el mundo de la movilidad conviven distintas versiones de Android e IOS, por lo que son frecuentes los problemas de compatibilidad entre marcas o entre versiones. En el caso de Android además cada fabricante tiene libertad para modificarlo a su gusto, lo que repercute en el funcionamiento de las apps.

Los motores gráficos ayudan en esa tarea implementando funciones propias para evitar que el programador tenga que llamar directamente al sistema operativo, y así ofrecer una capa de compatibilidad multidispositivo.

Multiplataforma.

Hoy en día existen diversas plataformas: IOs, Android, BlackBerry, etc. Algunos motores gráficos como Libgdx o Cocos2d, ofrecen compatibilidad multiplataforma, lo que supone una gran ventaja respecto a la programación directamente para el sistema operativo, que implica tener que volver a codificar nuestra aplicación para cada una de las plataformas. En su lugar, estos motores nos permiten seleccionar cualquier plataforma en el momento en que vayamos a compilar, logrando esta capacidad transcodificando nuestro código en un código de la plataforma a partir de meta modelos de programación.

Librerías externas

La comunidad es muy activa y está creando constantemente nuevas formas de expandir la funcionalidad de estos frameworks, por ejemplo añadiéndole compatibilidad con físicas o añadiendo la librería box2d, que permite controlar la física de objetos en sistema real simplemente seteando una serie de propiedades. Uno de los primeros videojuegos que hizo uso de esta librería fue el conocidísimo Angry Birds.

AngryBirds

Monetización e integración con redes sociales

Empresas como Google ofrecen, a través de servicios como AdMob, la posibilidad de integrar sus anuncios en nuestras aplicaciones a traves de APIs. Lo mismo ocurre si deseamos integrar funciones de redes sociales como Facebook o Twitter. 

Los motores gráficos simplifican hasta un nivel más la inclusión de dichas APIs en nuestras aplicaciones, ofreciendo funciones propias que encapsulan y facilitan las llamadas de APIs de terceros.

Velocidad de refresco

Los motores gráficos ofrecen una capa de abstracción con Open GL (API grafica 2D,3D), que nos abstrae de las complejidades de dicho framework. Si comenzamos el desarrollo de un videojuego directamente sobre Android, utilizando Canvas (una de las clases más comunes para pintar las texturas),  nos podemos encontrar con una desagradable sorpresa al ver que simplemente poniendo unas pocas texturas y sprites (personajes de juego) el rendimiento de nuestra pequeña aplicación puede, dependiendo del dispositivo, decaer gravemente.

Esto sucede porque Android no acelera estas texturas con la GPU , sino que es Java el encargando de hacerlo utilizando la CPU, en vez de hacerlo Open GL que si dispone de aceleración gráfica por parte de la GPU.

A partir de la actualización Androiod 4.0 Ice Cream Sandwich este problema fue parcialmente resuelto posibilitando la aceleración hardware para la clase Canvas, pero requiere  que el usuario previamente tenga que habilitarlo en el menú de su dispositivo.


Conclusiones

Ya hemos señalado las principales ventajas de crear un videojuego utilizando un motor gráfico. Al igual que  para los videojuegos, existen otros frameworks destinados a la creación de aplicaciones móviles tradicionales, como por ejemplo: PhoneGap, JQuery Movile, AppCelerator, etc.

En estos frameworks normalmente separan la vista del controlador: Por una parte, la vista se suele programar en HTML + JS + CSS, mientras que el controlador se suele programar en algún tipo de script: Javascript, LUA, etc, que será después interpretado y recodificado al lenguaje de la plataforma para la que se compila.

Por lo tanto siempre que se diseñe una aplicación móvil, tanto videojuego como aplicación tradicional, es recomendable la utilización de un framework que aporte al menos la capacidad de multiplataforma.