[XNA] SpriteSheets

La importancia de los sprites recobra importancia con el «renacimiento» que están viviendo los juegos 2D en las plataformas móviles. Algo muy importante en el desarrollo de videojuegos, independientemente de la plataforma, es el uso de spritesheets para almacenarlos. Un spritesheet no es más que una textura que contiene muchas imágenes, que a pesar de estar concentradas en un solo fichero, se usarán de forma separada en el juego. A veces tendemos a pensar que sólo se deben usar para animaciones de sprites 2D, pero eso es un error. En general, el uso de un sprite sheet está recomendado por varios motivos:

 

  • Es mucho más rápido cargar 1 textura que contenga varias imágenes, que todas las imágenes por separado, aunque la imagen resultante sea la misma.
  • Es mucho más eficiente a la hora de hacer el render con la tarjeta gráfica, ya que no tenemos que estar enviándole a esta N texturas, sino que sólo tenemos que decirle qué partes queremos que renderice en cada momento.
  • Permiten controlar más facilmente que las dimensiones de la textura final (ancho y alto) sean una potencia de 2. Eso permite mantener a raya el tamaño de nuestras texturas (más info aquí). Esto siempre es importante, pero empieza a serlo mucho más en los juegos para móviles, donde los recursos de memoria son mucho más limitados que en otros sistemas.

 

Aquí tenemos un ejemplo típico de spritesheet:

¿Cómo se puede generar un spritesheet? Con photoshop, con paint… o bien, con Zwoptex, una herramienta que bien podemos comprar por sólo 15$, o bien usar online -versión flash- totalmente gratis. Esta app se encarga de organizar los sprites en un canva de dimensiones predeterminadas.  Otra ventaja de esta herramienta es que genera un fichero de coordenadas que nos indica cómo se localiza cada imagen, el cual después podríamos parsear desde nuestro juego de forma más o menos automatizada -no he encontrado ya hecho ningún content processor para XNA-.

También tenemos un empaquetador de Sprite Sheets en codeplex llamado «Sprite Sheet Packer«, desarrollado por Nick Gravelyn del XNA team (lo que por sí solo ya es una garantía). Este hace una tarea similar, y tiene opciones como forzar a que la textura resultante tenga unas dimensiones que sean potencia de 2.

Para el caso concreto de XNA, tenemos una solución genial, en el App Hub tenemos un content processor que leerá una lista de texturas independientes, a partir de un XML especificado, y en tiempo de compilación las unificará en una sola, organizándolas él solito para que ocupen el mínimo espacio posible. Para ello se utiliza un content processor que puede ser descargado aquí. El procesador además incluye una clase que nos permite acceder de forma extremadamente fácil a cualquiera de los sprites de la hoja de sprites, ya sea por índice o haciendo referencia al nombre de la textura.

 

[XNA] Mapas de tiles

Los mapas de tiles consisten en diseñar los niveles de los juegos reaprovechando pequeños gráficos una y otra vez, hasta terminar confeccionando un mapa que puede ser muy grande. Esto se utilizaba en los primeros videojuegos para aprovechar los recursos de memória disponible, muy limitada en las primeras máquinas en las que se ejecutaban los juegos.

Pero además este recurso tiene otra ventaja: pocos recursos gráficos necesarios. Es decir, que para diseñar un nivel más o menos grande, no necesitas tener un artista trabajando días y días para diseñar un montón de detalles, ya que si formamos el nivel a partir de pequeñas partes, estas se pueden reaprovechar. Y esto es genial para los desarrolladores independientes Smile

Más información teórica de los mapas de Tiles en la Wikipedia.

En el caso concreto de XNA, tenemos distintas formas de trabajar con Tiles. Algunos valientes desarrollan su propio tile engine. Y muchos “mueren” en el intento –o mejor dicho, su proyecto “muere”-. No vale la pena reinventar la rueda… hay muchos tile engines disponibles, y además gratuitos, así que no nos rompamos el coco. Uno de los más usados, para distintas plataformas es el Tiled Map Editor. Es un engine open source (C++) multiplataforma (funciona en Windows / Mac / Linux). Lo bueno que tiene, además de sencillo, es que fenera ficheros en un formato estandarizado llamado TMX, que no es más que un XML con una estructura determinada. Aquí vemos una captura de pantalla:

An orthogonal map

Tiene muchas ventajas: gratuito, fácil de usar, permite establecer propiedades personalizadas a los tiles que después podemos parsear en XNA… es una pasada Smile

Tras trabajar con esta aplicación, al final tendremos un fichero tmx y sus spritesheets asociados, de los que se compone el tilemap.

Cómo utilizamos el mapa generado desde XNA? Nada más fácil! Nick Gravelyn y Jesse Chounard han desarrollado una extensión del content pipeline que lee perfectamente el tmx con un simple Content.Load<Map>. La librería se llama TiledLib, y contiene documentación más que suficiente, así como ejemplos que se descargan junto a las dll necesarias.

Esta captura muestra la facilidad de uso de la librería en un juego muy sencillo:

game.png

Y eso es todo por hoy. Hasta pronto!

Conferencias de Videojuegos en Lleida

El próximo 28 de junio, se realizarán en el Parque Científico de Lleida dos conferencias de videojuegos, en la que dos empresas nos contarán sus experiencias desarrollando videojuegos. La asistencia es gratuita, y únicamente hay que reservar la plaza por e-mail a la dirección info[-arroba-]plungeinteractive.com. Las conferencias están organizadas por la empresa Plunge Interactive, y cuentan con la colaboración de la Universitat de Lleida, el Parque Científico y Tecnológico de Lleida y el Ayuntamiento de Lleida.

Por un lado Rubén López, nos explicará sus experiencias de desarrollo en la empresa Novarama, en la que lleva años desarrollando videojuegos para PSP, Play Station 3, XBOX 360 y Wii, y entre los que destaca el conocidísimo InviZanimals, para PSP. A continuación Pol Urós, programador de la joven empresa BeautiFun Games dará una charla más técnica, y nos introducirá a las plataformas de desarrollo UDK y Unity 3D.

Estas conferencias se enmarcan en el Curso de desarrollo de Videojuegos ofrecido por Plunge Interactive, aunque como se ha dicho, la asistencia a estas charlas es gratuita.

Para más información, podéis acceder a la web de Plunge Interactive.