sábado, 20 de marzo de 2010

DevSpace #11 “Desarrollo de videojuegos para Android”

Hoy ha tenido lugar el DevSpace #11, que ha girado entorno al desarrollo de videojuegos sobre la plataforma Android, la charla ha sido impartida por el grupo The Flying Cortijo quienes han estado promocionando y repartiendo copias de su juego Tile Land, un juego de puzles que consiste en formar parejas de tiles idénticos.

En cuestión de programación, hay que evitar en la medida de lo posible el garbage collector, este proceso puede llegar a consumir 600 ms y salta cuando hay del orden de 2000 objetos en memoria, lo que puede llegar a ser un performance killer.

Las técnicas para evitar este problema son la delegación de actividades costosas en memoria y proceso al código nativo, para lo que hay que utilizar el ndk de android y en general cualquier tipo de creación o eliminación de referencias, almacenar los objetos en listas para no perderlas.

Sobre el sonido, se recomienda el formato ogg y el uso de la clase SoundPool para almacenar los efectos del tipo disparos, explosiones, etc de la aplicación.

A nivel de gráficos la aplicación está construida con archivos pequeñitos en peso, el proceso de construcción básico es la creación de un boceto en coreldraw para la posterior edición con alguna herramienta de dibujo vectorial, ha dado tiempo a hacer una pequeña demo de como se realizaría una animación.

El vídeo de presentación se ha mostrado tras unas nociones de creación de sonidos, como aplicar efectos y como componer un theme en general.

Editado (3/5/10):

Aqui tenemos un enlace a algunos recursos más sobre la ponencia, donde podemos encontrar fotos y un vídeo del evento.
http://www.desea.es/?p=328

martes, 16 de marzo de 2010

BulletJni rules

Al final conseguí poner en pié la biblioteca jbox2d portada a android y la verdad es que el rendimiento no era nada del otro mundo, la probé con canvas y el código era android (no nativo) pero aún así el rendimiento era muy pobre, 1 o 2 frames con 10 objetos en pantalla colisionando en forma de pirámide.

Así es que estube probando otras opciones, una de ellas que es la que al final me convenció fué BulletJni, que es una biblioteca que hace uso de métodos nativos en c para el cálculo de colisiones y movimientos físicos, por ahora lo que se puede ver es una aplicación en la que 10 sprites se mueven por la pantalla al son del acelerómetro, pero rinde entre 25-50 fps, lo cual me la pone muy gorda.

Se puede ver el código fuente en http://code.google.com/p/android-2d-engine/source/browse/#svn/branches/bullet_jni

miércoles, 3 de marzo de 2010

Engine para juegos android

Estoy buscando la forma de hacer un jueguecillo para android y necesito un engine 2d, así es que a buscar tocan, hay poco esto es todo lo que estuve viendo

Si quieres desarrollar no puedes dar la espalda a la comunidad, así es que no te olvides de pasarte por anddev.org


Rokon es una biblioteca para desarrollo de juegos 2d, actualmente tiene un problema con la herencia entre Sprites y objetos dinámicos, un poco floja en dinámicas

ProAndEngine no tiene documentación pero lo único que hace es lo que se ve.

JBox2D tiene un sistema de colisiones y otro de físicas completo, está basado en box2d, una biblioteca c++, es genérico, así es que supongo que necesitará alguna biblioteca gráfica, y la lógica de negocio del juego.

Uhm... rokon + jbox2d = jRox2d, a ver que tal.

Problema número 1:
Rokon tiene una herencia desde mi punto de vista no correcta y eso crea problemas en los behaviours de los sprites, solución: todo objeto que hay en la pantalla es un sprite, pero sólo los objetos que no son una isla son objetos dinámicos, la herencia está al revés y ahora no se puede usar el tipo primitivo que es sprite y colarle un DinamicObject cuando sea necesario, no puede haber islas, por que el tipo más básico en la herencia es el objeto más complejo.

Update:
He tenido que tocar todo el sistema de sprites y ya sólo falta por funcionar la gravedad que la he incluido en el dynamicObject, tengo algún problemilla con la temporización de los eventos :S

Update:
Problemas solucionados relativamente, se quedan los Sprites como clase base, pero la he liado un poco invirtiendo las clases, así es que hay que revisar las responsabilidades de BasicSprite, DynamicObject y Sprite, es probable que sustituya esa parte del sistema por jbox2d.
https://code.google.com/p/blasters/source/checkout