lunes, abril 09, 2007

Nuclex.Fonts - Renderizando fuentes con XNA

Si hay alguna funcionalidad necesaria para la programación de videojuegos que XNA no facilita ésa es la del renderizado de caracteres (o fuentes). Nuclex intenta solucionar el problema usando el modelo de programación de .net y XNA de manera sencilla.
Creo que todos coincidimos en que el renderizado de fuentes por pantalla es una función imprescindible de los videojuegos. Sin embargo, por desgracia, XNA, a pesar de su enorme versatilidad y su API sencilla y amigable, falla enormemente en este aspecto no proporcionando un sistema de rederizado de fuentes.

Sin embargo, lo que sí proporciona XNA es un modelo de programación fácilmente extensible. Por eso, una vez registrada la necesidad de funcionalidad, es fácil preparar un parche que nos cubra la necesidad. Yo ya he visto varios por la red, pero uno de los más sencillos (si no el que más) es la librería de componentes de Nuclex.

La gran ventaja de Nuclex es que está completamente integrado con el modelo de programación de XNA, basado en componentes. En realidad, la dll que nos proporciona nos ofrece un componente llamado TextManager, que podemos incluír en nuestro juego como haríamos con cualquier otro componente. Los métodos Update y Draw ya están definidos y el único problema se plantea a la hora de cargar la fuente que queremos utilizar en pantalla.

Nuclex.Fonts nos soluciona ese problema, porque además de proporcionarnos el componente para renderizar fuentes, nos proporciona la extensión del Content Pipeline para cargarlas en nuestro juego como cargaríamos cualquier tipo de contenido. Para saber qué hay que hacer y cómo, podéis ver el tutorial (en inglés).

Los resultados son verdaderamente sorprendentes. Cualquier fuente TrueType puede ser renderizada en pantalla con muchísima facilidad. Una simple llamada a la función DrawString nos permitirá renderizar lo que queramos por pantalla. Estoy deseando empezar a usarlo en mi proyecto de Juegos y Realidad Virtual. ¿Y vosotros? Si queréis os podéis bajar el código fuente de la solución aquí.

No hay comentarios: