jueves, 29 de septiembre de 2011

¿Qué herramientas puedo utilizar?

          El framework de android es bastante extenso y generalmente puede resultar confuso. Lo positivo de esto es que hay una API para cualquier cosa que se nos ocurra, además podemos usar una serie de SDK’s que están potenciadas para la creación de juegos.

          Lo primero que tenemos que tener en cuenta para la creación del juego es que si este va a ser 2D o 3D, conociendo esto ya recein podemos decidir que SDK es el que nos convendrá usar para que nos brinde los mejores resultados.

          Para desarrollar juegos en android existe un conjunto de herramientas y entonrnos de desarrollo que podemos utilizar para crear juegos en Andorid. Entre los mas conocidos o mas populares están:

Corona SDK: Lo que destaca de este SDK es con la facilidad y rapidez con las que se pueden empezar a crear juegos,  dentro de lo más interesante de este SDK es que tiene un motor de física muy avanzado que permite crear juegos con tan sólo escribir unas pocas líneas de código. Además nos permitirá crear aplicaciones rápidas, poderosas y multiplataforma que tienen acceso a API’s de otros frameworks que nos permitirán manipular componentes de hardware como la cámara, GPS y acelerómetro.

Entre sus características principales cuenta con:

    Integración automática con OpenGL-ES: No habrá necesidad de llamar a un sin número de clases y funciones para crear simples manipulaciones de la pantalla.

    Desarrollo Multiplataforma: Corona nos permite crear aplicaciones tanto para iOS (iPhone, iPad) como para Android.

    Rendimiento: Corona está optimizado para hacer uso de las características de hardware de aceleración, dando como resultado un alto rendimiento en juegos y aplicaciones.

    Características del dispositivo: Posee controles nativos para el acceso al dispositivo y hardware como cámara, acelerómetro, GPS, etc.

    Fácil de aprender: Corona utiliza el lenguaje de programación Lua, que es potente y fácil de aprender.

          Lo interesante de Corona SDK es que podemos utilizarlo totalmente gratis. Basta con llenar un formulario y obtendremos una versión trial que contiene todas las funcionalidades y que podemos usar por tiempo ilimitado para desarrollar nuestros videojuegos. Pero si queremos darle uso comercial, ahí es cuando tendremos que comprar la licencia Indie que cuesta $199 dólares al año y que nos permite desarrollar únicamente para iPhone o para Android y $349 al año en la versión que nos permite trabajar con ambas plataformas.


Dejo un video para que vean lo fácil que es desarrollar con este SDK.




Libgdx: Este es un framework multiplataforma de desarrollo de juegos para Windows, Linux y Android. Está escrito en Java con una mezcla de C/C++ para dar soporte y rendimiento a tareas relacionadas con el uso de la física y procesamiento de audio. De esta forma, sólo hay que preocuparse por la parte de codificar en lenguaje Java mientras el framework se encarga de empaquetar todo el código nativo de la aplicacion.

          Otra de las cosas interesantes de Libgdx es que permite escribir, probar y depurar la aplicación en el PC y utilizar el mismo código para Android. Esto se debe a que uno de los objetivos principales de este framework es brindar una arquitectura unificada para trabajar, garantizando el mismo comportamiento en todas las plataformas para las cuáles se ha creado el juego. Pero aun con esto, hay ciertas cosas que se deben tomar en cuenta cuando se está trabajando un mismo juego para PC y para Android, ya que el rendimiento puede ser muy bueno en PC y muy malo en Android.

          Dentro de las herramientas que nos brinda Libgdx son las siguientes:

    Un framework: Que nos permitirá manejar el ciclo de vida (creación, pausa, reanudación y destrucción) de nuestra aplicación.

    Un módulo de gráficos: Que nos proporciona una forma de dibujar objetos en la pantalla.

    Un módulo de audio: Para reproducir música y efectos de audio.

    Un módulo de entrada: Para recibir toda la información del usuario proveniente del mouse, teclado, pantalla táctil, acelerómetro, etc.

    Un módulo de I/O: Para leer y escribir datos como texturas, mapas o archivos de configuración.


Aca hay un video de un juego creado con este SDK.



 
AndEngine: Este SDK es que es de código abierto y que en sí, se trata de una implementación 2D de OpenGL para Android por lo que se utilizara puramente el lengaue Java, a diferencia de los motores Unity3D y Shiva3D con los que podíamos trabajar con lenguajes como C#, Python, o incluso Javascript.

          En AndEngine se usa una terminología propia, explico aquí los conceptos más básicos:

    BaseGameActivity: El BaseGameActivity es la raiz del juego, que contiene el motor y crea la vista donde se va a dibujar todo. Hay siempre exactamente un solo Engine por cada BaseGameActivity.

    Engine: El Engine es el motor interno del juego, se encarga de ir dibujando en pantalla y actualizando objetos en la escena, que contiene todo el contenido que tu juego lleva. Normalmente hay una escena por por Engine, a menos que vayas a usar un SplitScreenEngines.

    IResolutionPolicy: Una implementacion de IResolutionPolicy interface es parte del EngineOptions. Te hace abstraerte de la resolución del terminal, tú trabajas para una resolución y el AndEngine se encarga del resto.

    Camera: Un objeto Camera define el rectangulo visible actualmente de la escena actual, no tiene porqué ser la escena completa. Normalmente hay una cámara por escena. Hay subclases específicas que permiten hacer zoom y mover la cámara suavemente.

    Scene: La clase Scene es el contenedor para todos los objetos que se van a dibujar en la escena. Una escena puede tener Layers, que son capas para ordenar objetos. Hay subclases de la Scene como CameraScene/HUD/MenuScene que tienen comportamientos específicos.

    Entity: Una entidad es un objeto que puede ser dibujado, como Imagenes, rectángulos, Texto, Líneas. Una entidad tiene posición/rotación/zoom/color...

    Texture: Una textura es una imagen que se guarda en memoria. En Android, las imágenes deben ser una potencia de 2.

    ITextureSource: Una implementacion de ITextureSource-interface se encarga de cargar una imagen en una posición en la textura.

    TextureRegion: Una TextureRegion define un rectangulo en una imagen. Las TextureRegion se usan por Sprites para usar una imagen grande en la que guardamos muchas imagenes.

    PhysicsConnector: Motor de físicas integrado en el Engine.


Aca hay un video de la física de AndEngine.



Unity3D: Con este motor de videojuegos se pueden desarrollar juegos en 3D implementar física avanzada, crear escenarios rápidamente con el editor de terrenos y crear scripts en tres lenguajes de programación distintos, Python, JavaScript y C#. Aunque la versión la gratuita permite publicar los juegos para Windows y para la web, la versión para publicación en Android tiene un costo de $400 dólares.

          Por otro lado, Unity3D soporta una amplia variedad de formatos de diseños 3D como Blender, Cinema 4D, Maya y 3ds Max, por lo que los diseños se pueden importar a un escenario en Unity para luego armar un juego con gráficos de última generación. Lo mejor es que no es necesario escribir código distinto para cada plataforma, si no que una vez desarrollado el juego podemos exportarlo a Xbox360, Playstation 3, Nintendo Wii, MacOS, Windows, iPhone y obviamente juegos web que se reproducen a través de un plugin.


Y  un video de un demo desarrollado con Unity3D.


¿Qué tipo de juegos crear?


         Hablare sobre los tipos de juegos que podemos crear, estas categorías con solo una referencia, ya que podemos crear cualquier cosa, pero podemos tomar como referencia alguna de estas categorías.

Juegos casuales: Esta categoría se refiere a los juegos que tienen una gran accesibilidad, ósea no se necesita ser un gran jugador para poder disfrutarlos, este tipo de juegos son los que predominan en el Android Market. Un ejemplo de un juego de esta categoría es el conocido Angry Birds.



Juegos tipo puzle: No se necesita mucha explicación para esta categoría, un ejemplo de juego de esta categoría es el ya conocido Tetris. En esta categoría pueden entrar en juego la física y lógica que se pueden programar para hacer que el juego sea aun más llamativo y tenga más grados de dificultad diferente.



Juegos de árcade y acción: Acá se encasillan los tipos de juegos en los que podemos sacar más potencial a la plataforma Android, ya que en este tipo de juegos podemos usas características mucho más complejas como elementos 3D que nos van a ayudar a crear juegos en primera y tercera persona, juegos de carreras, naves. Etc.



Juegos de Tower-Defense: En esta categoría se refiere a grandes rasgos a los tipos de juegos en los que aparecen un montón de enemigos por un lado de la pantalla, y hay que impedir que lleguen al otro lado mediante torres u obstáculos. También hay q mencionar que son los juegos más vendidos en la tienda de aplicaciones.



Innovación: Y esta última categoría es lo que comentaba antes, de que podemos crear cualquier tipo de juego que no necesariamente tienen que pertenecer a una de estas categorías, puede ser algo nuevo, nunca visto, donde se pueden explotar nuevas características de los dispositivos para crear nuevas formas de jugar y ofrecer una nueva experiencia al jugador.


miércoles, 28 de septiembre de 2011

¿Por qué hacer un juego para una plataforma móvil?


         


         Por que realizar un juego para una plataforma móvil y no desarrollar un juego para PC. SI los dispositivos móviles tienen pantallas chicas, poco procesador, tiene límites de tamaño, el teclado de un celular es muy malo para usarlo como joystick, las pantallas táctiles igual son difíciles de usar para controlar un juego.

         Averiguando un poco sobre los juegos y los dispositivos móviles o portátiles me lleve una gran sorpresa. Voy a darles algunas cifras que encontré en la web.

● El 79% de los usuarios de Iphone han comprado al menos un juego.
● Hay más de 100 millones de Nintendo DS en el mundo.
● Sony PSP ha vendido más de 50 millones de dispositivos.
● Nintendo Gameboy y Gameboy Advance en conjunto suman alrededor de 200 millones de unidades.

          Claro estas cifras con estimadas del año 2009, pero hoy en día se ha masificado mucho mas el uso de Smartphones y sigue en crecimiento.

          La ventaja que se le puede ver a los smartphones es que están la mayor parte del día junto al usuario, están altamente conectados entre si y a internet, poseen la capacidad de conexión a las redes sociales, entre otras características.

          Algunas de las capacidades que se pueden y necesariamente se deben tomar en cuenta en la creación de un juego para un smartphone y que son características que el PC generalmente no las posee, estas son.

● Pantalla Touchscreen.
● Acelerómetro.
● GPS.
● Sensor de Orientación.
● Bluetooth.
● Wifi.
● Trackball, Teclado y otros métodos de entrada (no se encuentran en todos los dispositivos).

          Con estas características y un poco de imaginación se puede lograr un juego novedoso y a la vez entretenido, ya que la idea principal es que el jugador se enganche con él  y que se sienta atraído por la jugabilidad (ojala novedosa) que no se experimenta en juegos de PC ya presenta las características “especiales” que están presentes en los dispositivos móviles.

¿De donde se gesto la idea?


         

           La idea de crear un juego para Android me vino a la mente gracias a que tenia que realizar un proyecto que fuera novedoso y no el típico proyecto de ingreso de datos y consultar datos, así que dándole vueltas al asunto pensé y llegue a la conclusión de crear algo para la plataforma Android, pero la pregunta era ¿¿QUE HACER?? Y a la vez que fuera algo novedoso.

          Como siempre he sido un fanático de los juegos me dije “¿Y por qué no hacer un juego?”. Primero sonó una idea genial jajaja pero al investigar un poco sobre el asunto, es mucho más complejo de lo que creí,  ya que los juegos son creaciones de software muy exigentes, que poseen algoritmos y métodos complejos y desarrollarlos requiere que interactúen profesionales de diversas áreas, más específicamente profesionales de casi todas las ramas de las ciencias de la computación. Por qué digo esto, por que para este tipo de desarrollo se necesita alguien que sepa de física, matemáticas, programación, arte, sonido, gestión, también saber un poco de inteligencia artificial y autómatas, pero tratare de no complicarme desarrollando el juego mas allá de lo estrictamente necesario. Además de esto desarrollar un juego conlleva un proceso de diseño multimedia, ósea hay que diseñar en si el juego, su idea, el desarrollo, los gráficos, el sonido, etc. Lo ideal sería tener un equipo de personas que estén encargadas de cada una de estas  tareas, pero en este caso no va a ser así . Ya que yo voy a realizar el juego y voy a tratar de hacerme cargo de todo el proceso de desarrollo. Pero no todo es tan malo, como beneficio puedo decir que voy a llegar a comprender diversos temas de los cuales ni siquiera sabía que estaban involucrados al crear un proyecto como este y llegar a comprenderlos de una manera que sea entretenida (o por lo menos eso creo) como creando un juego, algo que a todos los que nos gustan los juegos quisimos hacer alguna vez.  Por esto eso no será impedimento para poder crear un juego para esta plataforma.

          Además el desarrollo de videojuegos hoy en día es una de las áreas de mayor innovación y crecimiento en la industria del software. De hecho, su crecimiento es tal que ya ha superado, en términos de ventas, a la industria del cine y la música. Y si esto fuera poco su influencia en la vida diaria es evidente; los juegos  son hoy uno de los medios más utilizados (como la TV, cine, literatura, Internet u otros). 

         Ojala esta aventura llegue a buen puerto xD...
Nos vemos pronto.