jueves, octubre 05, 2006

El "por qué" (modificado 6.10.2006)

¿Por qué narices se me ocurrió empezar a trastear con XNA?

Antes de nada, saludos al DotNetClub de la Universidad de Alicante (y a todos los Llopis del mundo mundial XD).

Puesto que XNA sigue siendo una tecnología Beta, ¿por qué se me ocurriría a mi meterme a trastearla? Bueno, creo que le debo a la comunidad de usuarios de XNA y a mi propio cerebro una explicación.

Este año espero que sea (por fin) mi último año de carrera. Para que así sea he tenido que cogerme tres asignaturas de créditos de libre elección, entre ellas Juegos y Realidad Virtual. Siempre me ha llamado la atención el tema de diseño y programación de videojuegos (no os equivoquéis: "diseño" no tiene nada que ver con hacer a los personajes o escenarios) porque me parecen una aplicación muy productiva de los poderes mágicos de la informática.

Para que la gente lo sepa, soy fan acérrimo (buscadlo en la RAE) de la saga de Monkey Island, de Grim Fandango, Indiana Jones, Sam & Max, The Day of The Tentacle y de otras tantas aventuras gráficas clásicas que han marcado historia. Me encantan los videojuegos de estrategia y, muy especialmente, la visión que tiene Nintendo del mundo del videojuego.

Además de mi propio interés, está el interés económico. Como proyecto de futuro informático (mediocre, pero informático) el hecho de que la industria del videojuego sea la que más ha crecido en Europa últimamente no me pasa desapercibido. Por tanto, aunque sea para trastear, quiero saber algo de videojuegos.

Desde siempre, trastear con librerías gráficas ha sido un apaga y vámonos. Muy poca gente iba por gusto a meterse a programar con OpenGL a saco o DirectX así de primeras. Generalmente se utilizaban librerías más tontitas como Allegro o similares para empezar. Entender el sistema de bucle contínuo de un videojuego (ya postearé algo sobre esto para los que no sepáis qué es) es un poco complicado al principio. Y diseñar el sistema de clases y estructuras de datos de un juego es para morirse.

De pronto aparecieron en escena las tecnologías .NET. A nadie se le ocurriría empezar a programar un juego en Visual Basic (ni loco) teniendo todos los motores y estructuras predefinidas históricamente en C++. Pero .NET le da una vuelta al asunto y mediante la compartición de la librería de clases (no sólo la básica sino incluso las cradas por tí mismo) permitía que esas clases se exportaran a cualquier lenguaje .NET. ¿Guay no? Pues lo primero que pensé (y no es broma) en la primera charla del Microsoft University Tour, cuando estaba en segundo haciendo POO fue: "¿Y esto también vale para videojuegos?". Pues teóricamente sí, pero técnicamente era un poco más difícil.

Luego apareció el primer acercamiento con las Managed DirectX, que no es más que una capa que permite a los lenguajes .NET acceder a DirectX (que seguían siendo librerías nativas externas a .NET). El caso es que eso tiraba, pero cualquier programador prefería sus clases en C++ a tener que hacerlo todo desde cero en C# (el mejor lenguaje del mundo mundial).

Por eso, aprovechando el tirón de XBOX 360 y el próximo lanzamiento de Vista (con .NET 3.0), ahora Microsoft se saca de la manga las librerías XNA. Están concebidas como una capa totalmente .NET con las mismas funcionalidades (o más) que DirectX, las cuales continúan siendo nativas al sistema.

Lo más difícil de programar en un videojuego es el sistema de transporte de diseños 2D o 3D a código. Pero XNA pretende incluir todo eso de serie (¡toma!). Así para meter meshes con bones en tu videojuego sólo tendrás que invocar una función de una clase XNA y ya está. Es más: se podrá utilizar como una herramienta en tu toolbox de Visual Studio. Y todo esto gracias al Content Pipeline que, desgraciadamente, no estaba disponible cuando se lanzó la beta de XNA (sniff ¬¬).

No obstante aún se puede trastear con lo que será XNA en cosas tan sencillas como la creación de sprites. Eso es en lo que he estado trabajando hasta ahora. Próximamente colgaré el proyecto de librerías que tengo en casa con dos mejoras de la clase SpriteBatch de XNA. Pondré también un proyecto de juego para que veáis cómo funcionan.

Hasta entonces descargaros el XNA y probadlo, a ver qué os parece. Colgad comentarios en los post que os interesen. Ok?

Isaac Llopis

No hay comentarios: