viernes, 22 de junio de 2012

Diseñando niveles para tus juegos libgdx : TiledMaps


A la hora de hacer un juego, siempre es importante el diseño de tus niveles y hacerlo todo en código es bastante difícil, actualmente hay muchas técnicas que ayudan a diseñar niveles como: el pixeliado que es una de las más viejas y solo trata de una imagen con puntos indicando el nivel, como la imagen de abajo en donde los puntos rojos representan los obstáculos o enemigos y el verde el inicio del jugador.

También existen otras como tiledMaps y los archivos svg que son para definir gráficos vectoriales, en esta ocasión explicare los tiled maps en otro momento le tocara el turno a los archivos svg que son muy buenos a la hora de usarlos en conjunto con boxd2, un editor de archivos svg Inkscape.

Un editor para archivos tilde es TiledQt 0.8.1 for Windows , como libgdx soporta estos tipos de archivos es muy fácil usarlos.

primero que nada tenemos que crear texturas o objetos como plantas para pintarlas con el programa tiled Qt, estas texturas las cree en un editor de imágenes común con un tamaño de 32x32 puede ser desde photoshop a paint para luego empaquetarlas con TexturePacker como en la imagen:  



En el input va la carpeta donde se tiene todas las texturas y en el output una carpeta vacía, después de presionar Pack se crea una imagen  con todas las demás y un archivo llamado "pack" todo esto en la carpeta que se selecciono como output.



Con la textura empaquetada ahora si abrimos tiled Qt y creamos un archivo nuevo, en el menú se selecciona "Mapa" y agregamos un nuevo conjunto de patrones y elegimos la imagen que nos genero TexturePacker. Después de esos pasos simplemente es seleccionar de la parte donde aparecen los patrones o texturas, y pintar en la plantilla.






Pinte pensando en un juego de estrategia  con vista área, simplemente guardamos el archivo tmx en el proyecto de nuestro juego.


En java solo cargamos el archivo con estas líneas: 


map = TiledLoader.createMap(Gdx.files.internal("data/test.tmx"));
atlas = new TileAtlas(map, Gdx.files.internal("data/"));




Y en nuestro bucle pintamos con esta línea:


tileMapRenderer.render(guiCam);


Con esas tres líneas el resultado es la implementación de los archivos tmx, gracias a que libgdx hace esto fácil , no me encontrado con otras librerías que soporten este formato aparte de libgdx, puede ser útil a la hora de crear juegos de estrategia o plataforma, los archivos tmx no solo son para pintar fondos o texturas con mas trabajo pueden usarse en conjunto con boxd2 para crear colisiones con las texturas y crear niveles vivos no solo pintados como los dejamos en esta ocasión, todo esto se logra parseando el archivo y creando un archivo de colisiones y posteriormente crear el objeto en box2d un buen tutorial sobre esto que les comento lo pueden leer aquí  --> dpk.

Les dejo el proyecto eclipse que hice para este ejercicio tiledMapsTest.









domingo, 13 de mayo de 2012

Desarrollando juegos android: libgdx

Desde hace unos dos meses he estado probando libgdx, lo cual se ha he hecho bastante útil a la hora de desarrollar para esta plataforma que es android, hasta el momento he hecho dos juegos completamente en esta plataforma el ultimo implementando box2d , la verdad no sé si libgdx implementa este engine de la forma optima pero hasta ahorita a mi me ha gustado el performance de este, tal vez pera más exigentes no sea optimo como algunos artículos que he  leído pero todo se trata de competencia , algunos dicen que son los mejores y otros dicen lo mismo, igualito como los candidatos de México (al memento de escribir este articulo estábamos en elecciones en México para la presidencia de la república X_X ).

Para implementar libgdx solo tienen que bajarlo desde este link es la última versión, en este zip encontraran los archivos necesarios para implementarlo, ahora se los explico las más importes:

gdx.jar - librerías básicas, estas van en cualquier proyecto de libgdx.
Gdx-backend-jogl.jar    - se usa para las aplicaciones de escritorio.
Gdx-backend-android.jar   - Para android.

Este video que está en  el google code de libgdx lo explica bastante bien:








viernes, 4 de mayo de 2012

Box2d, desarrollando juegos..

http://readthedocs.org/docs/pilas/en/latest/_images/box2d.png 

Cuando estamos desarrollando un juego lo más importante es la física de él, que tu mundo se asemeje  al real en lo mejor posible desde la gravedad de los objetos hasta la reacción de ellos con otros objetos, texturas etc. desarrollar desde cero todo esto conlleva un gran esfuerzo y tiempo, por eso existen herramientas que te ayudan a implementar todo lo anterior de una manera fácil y rápida, en este caso les hablare un  poco de BOX2D.

Box2d es un engine para física 2d, está programada en c++ pero existen diferentes ports, para los diferentes lenguajes como net o java. Muchos juegos en la actualidad lo usan, el más famoso en estos días seria "Angry Birds" toda la física involucrada desde que arrojas el pajarito hasta que pegas con los bloques es obra de Box2d. Algunos frameworks que los soportan son XNA, CORONA, Cocos2d y LIBGDX.


La implementación de box2d es muy sencilla, en java sería algo así:

World world=new World(new Vector2(0, -10), true);

Con esa línea creas el mundo, World es una clase propietaria de box2d en la que obviamente se refiere al mundo en que participaran todos los objetos, el vector que indica en la declaración se refiere a la gravedad del mundo, "X" para simular gravedad en horizontal, "Y" la gravedad en vertical.

Después de crear tu mundo simplemente tienes que agregar tus objetos, existen varios tipos de objetos: dinámicos, estáticos, bullets, kinematics. De esta forma se crearía el mas sencillo de todos que sería el estático ósea que no le afecta la gravedad de tu mundo:

 //  Se crea el cuerpo, agrando posición  y tipo.

              BodyDef bd = new BodyDef();
                bd.position.set(x, y);
                bd.type = BodyType.DynamicBody;
                ground1 = world.createBody(bd);
               
// Se crea la forma que tendrá el cuerpo en este caso un circulo.

                CircleShape shape1 = new CircleShape();
                shape1.setRadius(1f);

//    Se agregan las características del cuerpo, densidad, fricción etc.
        
                FixtureDef  fixtureDef = new FixtureDef();
                fixtureDef.shape = shape1;
                fixtureDef.density = 1.0f;
                fixtureDef.friction=3f;
                fixtureDef.filter.groupIndex=-2;
                fixtureDef.filter.categoryBits=0x0002;

                ground1.createFixture(fixtureDef);


Es algo largo crear un simple objeto, pero puedes ingeniártelas para crear una clase que te ayude a crear objetos con más rapidez. de esta forma es como se crea el mundo y un objeto por default, si agregas mas objetos y estos son dinámicos interactuaran entre ellos sin que tu tengas que programar nada, ósea que las colisiones y física en general funcionan por si solas dentro del mundo creado. Si quieren ejemplos vivos de como implementar esta gran herramienta que es box2d solo digan y los pondré, saludos.






jueves, 29 de marzo de 2012

Balloon Killer en el market


Les presento mi juego que hice en mis tiempos libres, es un juego simple que trata de romper globos antes de que se te escapen por la parte superior de la pantalla. Cuenta con niveles infinitos, cada nivel sube en cantidad de globos y velocidad. 

En el juego nos encontraremos con globos de diferentes colores, los azules color cielo son una especie de bonus y ahí dos diferentes tipos, unos que arrojan unas púas para que los demás globos choquen con ellos y se revienten sin hacer click, en niveles altos esto ayuda bastante, también existe otro que te permite arrastrar y a su paso deja una estela blanca con la cual puedes romper globos en cadena.

Cuanta con Openfeint, que se trata de una red social para gamers, en ella te puedes crear un perfil y hacer puntuaciones a nivel global o desbloquear logros al estilo de xbox live, esta versión de BK solo cuenta con leaderboards, en un futuro se agregaran logros para incrementar tu puntaje en Openfeint.

miércoles, 29 de febrero de 2012

Mi primera aplicacion en android market


 
Bueno ps hace unos días subí mi primera aplicación sencilla en android market, después de comprar la membrecía de 25 dólares es bastante sencillo subir las apps, solo te piden un icono, mínimo dos screens y un texto promocional. Luego de esto, como a los 20 minutos ya está tu app en el market.

La app que subí es un juego muy simple de ouija, que simula como si estuvieras preguntándole algún espíritu y este te responde. En sus primeros días la app lleva como unas 200 descargas, dejando claro la enorme competencia que hay en el market, creo que una app se puede perder fácil en el mar de aplicaciones sin una buena promoción de la app.

Pero la verdad esto de promocionar app creo que es para empresas con suficiente dinero para solventar campañas atreves de medios como admod, que el mínimo por campaña es de 10 dólares al día, esto equivale como a 10 min de promoción al día. Para los desarrolladores independientes que recién empiezan esto sería demasiado, la alternativas gratuitas que hay al momento de promocionar son otras redes como facebook o publicar en foros especializados de android pero esto es una ayuda mínima.

Por otro lado investigando en la red me encontré con personas con buena suerte, que no hicieron ni un cacho de publicidad y tienen buenas descargas al día. A sí que en conclusión ¿de qué depende de que una app  llegue a tener buenas descargas? En mi opinión suerte, una buena promoción, dinero para invertir y que la app sea original.

Por último les dejo el link de mi app en el market es gratis ; ) .

martes, 28 de febrero de 2012

Framework para juegos android



En la creación de un juego lleva bastante trabajo si te avientas a programar en puro android directo como cualquier app, esto suele ser muy difícil, para ello existen los frameworks que te ayudan a desarrollar más rápido, ahí varios  y se dividen en de pago y gratuitos. 

 El más conocido de pago es Corona Sdk presume de mejorar la rapidez del desarrollo en 5x. Por otro lado en la categoría de los gratuitos tenemos a libgdx, andengine, rokon y emo-Framework.

La selección de alguno de estos frameworks es decisión de los desarrolladores, en mi experiencia he usado libgdx y es en framework que te ayuda a desarrollar muy rápido, tiene muchos casos de usos disponibles en su wiki, soporta tanto 2d como 3d y es totalmente abierto es decir lo puedes modificar a tu gusto.  

En conclusión hay muchas opciones para desarrollar tus juegos de una forma eficiente y rápida por medio de fremeworks especializados en esta área, solo queda probarlos todos y elegir el que se te acomode más.