domingo, 19 de junio de 2011

Numis & Letrix: Juegos con AndEngine

Hola a todos,

Buno, pues tal y como os comenté, os voy a contar un poquillo el proceso que he seguido para crear Numis y Letrix.

No me voy a centrar en los aspectos más técnicos porque para eso hay webs y sitios mucho más indicados, pero os dejaré las referencias que a mí me han servido más.

Vamos a empezar por las malas noticias. Y es mi opinión personal o lo que me ha pasado a mí, pero si hacéis juegos sólo para ganar pasta, sería más lucrativo irse a buscar monedas a las cabinas o buscar entre los cojines de los sofás del salón. Salvo que tengais un juego innovador y rompedor o un canal de márketing excepcional.
Menos mal que de vez en cuando alguien pulsa en algún anuncio...

O tenéis que aguantar que alguien os escriba y os diga que vuestro juego es una mierda porque no reconoce la palabra “VARRER”... si, si, veridico. En fin, qué vas a hacer, le sacas de su error con diplomacia y ya está.

Las buenas noticias?
Oye, a mí me divierte hacerlos y aprendes.
Y la respuesta de la gente (salvo rarísimas excepciones como la que os he comentado) suele ser MAGNÍFICA. Y eso se agradece.
Yo por ejemplo nunca me esperé recibir tantos ánimos y halagos por parte de la gente como recibo por LotoApuestas, que a lo tonto está la primera (de las españolas) si buscas “loterias” en el Market y ya pasa holgadamente las 5000 descargas... Es algo que llena.
Es como la cocina, si lo haces con cariño se nota.



(Por cierto... ¿Aún no te has bajado LotoApuestas?... Pero hombre...!)

Bueno vale ya de chapa y vamos al lío.

Antes de nada, yo aconsejaría tener muy muy claro qué es lo que se va a hacer. Dibujarlo, escribirlo, hacer un esquema de navegación, lo que se os ocurra. Para evitar eso de si “..¿y si además meto esto y ahora mejor esto aquí y esto acá...? ...” . A ver, no es que si se os ocurre un cambio estupendo no lo metais, sino que en la medida de lo posible los cambios estupendos estén ya pensados de antemano.

Yo me haría un esquema de “navegación” y unos dibujetes muy claros de lo que va a pasar durante el juego.


Mirad, el AndEngine (el motor que he usado) se puede resumir de una manera bastante simple: Son unas cuantas capas superpuestas, dentro de cada cual tú pintas y mueves lo que quieras; todo esto acompañado por un hilo que está en constante ejecución moviéndolo todo.

Para que veais qué cosas se pueden hacer y se os ocurran ‘cienes y cienes’ de ideas, lo mejor es echarle un ojo a la demo de AndEngine.

https://market.android.com/details?id=org.anddev.andengine.examples

http://code.google.com/p/andengineexamples/

Yo cuando vi caer los cuadrados de uno de los ejemplos, al momento ví el Numis. Supongo que os pasará algo parecido con cualquiera de los ejemplos.

Solo con lo que hay en esa demo teneis el 80% de lo que podais necesitar.

Se pueden plantear los juegos de dos maneras: usando el motor de física o sin él.

Si usais el motor de física, creais un “mundo físico” y le dais cierta gravedad, (o ninguna) de manera que los objetos caigan con mayor o menor “ímpetu”.
Luego basta con crear objetos dentro de ese mundo físico y dotarles de ciertos valores, elasticidad, fricción... de forma que tú decides cómo interactuarán con los otros elementos de su mundo cuando colisionen.

Todo esto se asocia a una (o varias ) de las capas superpuestas que os comentaba antes, de modo que en la primera capa tendrás la imagen de fondo, en la siguente puedes tener los elementos moviéndose y en la otra, los textos, puntuaciones, botones....

Ya os digo que no voy a entrar en detalles técnicos porque hay gente que lo ha hecho ya antes y mejor, pero hacedme caso, esos dos enlaces son fundamentales. Sólo hace falta ganas de destriparlos y sacarles el jugo.

Imprescindible también:

http://www.andengine.org/forums/

Aquí hay ORO PURO, pero hay que bucear y desoxidar el inglés.

En español lo mejor (o lo único) que he encontrado es :

http://knol.google.com/k/juan-de-dios-maldonado-s%C3%A1nchez/gu%C3%ADa-tutorial-para-programar-juegos-2d/yf7xkfmg7vie/3#

Excelente trabajo el de este muchacho.

Y bibliografía oficial, que yo sepa, no hay.

Ahora sí que os voy a aportar mi granito de experiencia:

Esto come memoria como un cosaco. Imprescindible reutilizar todos los objetos que podais.

Un pool de objetos es, para entendernos, un repositorio de objetos ya creados que almaceno para no tener que andar todo el rato creando / destruyendo...
Cuando necesito uno de estos objetos (por ejemplo, disparo y sale una bala)  miro en el pool, si existe alguno, lo recojo, modifico las propiedades que sean y lo reutilizo. Si el pool está vacío, obviamente tengo que hacer un new Bala().

Son  clases de lo más sencillas y ejemplos en internet habrá a patadas.

Al terminar de usarlo (p.ej. la bala da en el blanco y desaparece) lo que hago es volver a meterla al pool.

Sed vivillos para optimizar el pool. Os cuento mi caso.

Mi caso es un poco especial, yo por ejemplo en Letrix tengo 27 elementos distintos que sólo se diferencian en el atributo Valor (qué letra es) y en la imagen. Entonces me hice un pool normal y un pre-pool que es un array de 27 posiciones. Las cajas A van a la pos. 0 del array, las B al 1... Así si necesito una letra, miro en el pre-pool, y si hay algo, me evito tener que tirar del pool normal y cambiar la imagen.
Lo mismo al reciclar un elemento, primero lo intento meter al pre-pool, y si ya está ocupado, al pool normal. Mucho mejor resultado que el pool a secas.

Cada cual en su juego tendrá sus trucos para ahorrar memoria, pero ya os digo que es básico. En los primeros días Numis tenía más problemas de memoria que un pez, y eso lo penalizó bastante; pero al meterle los pools y cuidando de no crear objetos a lo tonto quedó bastante bien.

Yo reutilizo incluso las explosiones de las letras.

Tened cuidado también a la hora de crear las texturas, encajadlo todo lo mejor posible para optimizar el espacio ocupado.

Cada vez que acabéis un nivel eliminad todo aquello que no sea reutilizable, limpiad vectores, arrays... Ya vendrá el Garbage Collector a comérselos.

También los sonidos .ogg son más eficientes que otros formatos, al menos en cuanto a tamaño.

Y no sé qué mas contaros... ¿Tiempo necesario? Hombre pues es como todo, el primero cuesta un siglo (y más teniendo en cuenta que te pones a ratos, cuando te dejan) y los demás ya van saliendo solos. Bueno, que yo he hecho solo dos, pero teniendo Numis, parir a Letrix fue bastante sencillo.

Bueno, ya tenéis el juego. Lo habéis probado lo mejor posible pero... ¿cómo estar seguro de que todo va a ir bien allá fuera?

Mano de Santo: ACRA :  http://code.google.com/p/acra/

Supongo que habrá mil formas más, a mi esta me gusta.

Y después de esto... ¿MARKETING? Si, todo el que podais. Yo de esto no tengo ni idea, pero aparte de dar la chapa a los colegas para que se lo bajen, escribir en foros, unos twitters y unos facebooks, poco se puede hacer. Si teneis más apps hechas con anuncios, podéis meter algún banner.
Pero me estoy dando cuenta de que el márketing es fundamental, tan importante o más que tener una app competente. Así que a cualquiera que pueda aportar alguna idea a este respecto le estaremos muy agradecido ;)

Bueno, sé que no es gran cosa, pero con lo que os he contado (o mejor dicho con los enlaces que os he dado) cualquiera puede meterse en harina.

Gracias por leerme, de verdad, y cualquer cosilla ya sabéis dónde estoy.

Y para quien no los haya probado... Échate un Numis o un Letrix, hombre!!

Saludos !

1 comentario:

  1. ¡Hombre!. Para ayudarte con el marketing estoy Yo. Mariposa de Guerra dixit. :-)

    ResponderEliminar