domingo, 1 de febrero de 2009

El framework XNA

El Framework XNA es un conjunto de librerías diseñadas y destinadas especificamente para el desarrollo de videojuegos. Para explicarlo mejor, veamos una imagen que nos indique donde está situado este framework dentro del modelo de capas de XNA.



Como se observa en la imagen, el framework XNA se ejecuta bajo .net. Se puede apreciar, que según en la plataforma donde esté en ejecución, el framework .net no será el mismo, pues XBox 360 y Zune a diferencia de Windows, utilizan el compact Framework, que además, no es el mismo compact framework de windows mobile. De esta manera sabemos que xna funcionará tanto en PC con windows(xp o vista), XBox 360 o Zune, pero no por el momento en windows mobile.

El Framework XNA tiene dos objetivos principales.

Uno de los objetivos es facilitar el desarrollo de videojuegos para las tres plataformas(Windows, Xbox 360 y Zune). Es decir, podemos crear un juego para windows y luego crear su versión para XBox rápida y facilmente sin mayores quebraderos de cabeza. Esto es posible gracias a las API que proporciona el framework XNA, que en su mayoría sirven para todas las plataformas. Evidentemente encontraremos funcionalidades que únicamente podremos utilizar para determinada plataforma, pero en general, muchos juegos son 100% compatibles entre las diversas plataformas.

El otro objetivo del framework XNA esta enfocado en la misma dirección que el anterior, facilitar el desarrollo de videojuegos. Hacer un juego no es fácil, no lo es para los profesionales que se dedican a ello, menos lo va a ser para la gente que empieza. Hay un montón de código que picar, pruebas a realizar y errores que tratar antes incluso de dibujar un punto en la pantalla. Gracias al framework XNA, no vamos a tener estos problemas.

No vamos a tener que preocuparnos de crear la ventana del juego, ni capturar los mensajes de windows, ni comprobar los eventos de inactividad, etc... Tampoco nos preocuparemos de enumerar los adaptadores gráficos o modos de pantalla, ni crear disposivos de Direct3d y gestionar cuando minimizamos el juego, o cambiamos el tamaño de la pantalla. Todo esto y más cosas, las hará el Framework XNA por nosotros.

A continuación, vamos a ver el modelo de capas que componen el Framwork XNA, para de esta manera, conocerlo mejor.


Como vemos, el framework XNA esta compuesto por 4 grandes capas: Plataforma, Nucleo del Framework, Framework extendido o extensible y juegos.

Plataforma

Es la capa mas baja, contiene las API nativas enmascaradas por XNA que son utilizadas mas arriba, en otro nivel, por las clases administradas. Algunas de las API que incluye esta capa son Direct3D 9, XACT, XINPUT, XCONTENT.

Núcleo del framework:

El núcleo, en realidad, es la primera capa del framework XNA. Proporciona las funcionalidades básicas sobre las que las otras capas trabajan. Si se quisiera proporcionar funcionalidad adicional gestionando con DirectX, se construiría en esta capa. Las areas agrupadas en el nucleo son las siguientes:

  • Gráficos:
    Como hemos visto anteriormente, la API gráfica(Graphics) que utiliza XNA es Direct3D 9. Un dato importante a tener en cuenta , es que a diferencia de DirectX9, XNA no tiene soporte para la pipeline de función fija(Fixed-Function Pipeline o FFP), al igual que DX10 y XBox. Esto lo explicaré mas detenidamente en otro post sobre la pipeline de renderizado. De todos modos, saber que en XNA puedes programar tus propios Shaders y efectos, y que para programar los juegos sin tener que desarrollar los shaders, existen clases que encapsulan shaders, como BasicEffect para definir el detalle final del renderizado de la escena y modelos 3D, o SpriteBatch para el muestreo de sprites en 2d.


  • Audio:
    XNA admite los siguientes formatos de archivos de sonido: .xap, .wav, .wma y .mp3.

    El sonido en XNA, antes de la version 3.0 sólo se reproducia a través de XACT (Cross-platform Audio Creation Tool), que es una librería de alto nivel para audio. Fue realizada por microsoft como parte de las sdk de directX y originalmente fue diseñada para XBox como API para el procesamiento óptimo de la señal digital. Posteriormente fue modificada para su funcionamiento en windows.

    Dentro de las herramientas que proporciona el XNA Game Studio, encontraremos una aplicación para crear los proyectos de audio necesarios para la API XACT. La aplicación se llama exactamente igual: Microsoft Cross-platform Audio Creation Tool (XACT), es un editor donde podremos empaquetar/agrupar nuestra música(en archivos .wav), configurando opciones como el volumen, las repeticiones mediante bucles, la mezcla de canales(incluye 5.1), etc... Esta herramienta guarda los proyectos en archivos .XAP que importar mas tarde a nuestro proyecto XNA.

    En el "pack" de herramientas suministradas por XNA también encontraremos XACT Auditioning Utilility, que es el servidor que reproducirá el sonido. Todo esto ya lo explicaré a modo de tutorial en otro artículo.

    Nota: No confundir XACT, con xACT de mac, no tiene nada que ver.

    A partir de la version 3.0, además de importar archivos .xap, también podremos añadir directamente ficheros .mp3, .wav y wma.


  • Entradas:
    La API de entradas(Input) del usuario, es XINPUT de directX. Es de acceso inmediato, no requiere ningún tipo de inicialización previa ni nada por el estilo, es más, no hay que preocuparse de asignar o liberar el dispositivo de entrada. Lo unico que hay que hacer es llamar al método GetState sobre el controlador adecuado y ya está :D. Hay clases para los controladores necesarios: el teclado(Keyboard), el ratón(Mouse) y por supuesto el mando de la XBox(GamePad). Hasta se pueden controlar los motores de vibración del mando de una forma sencillísima.


  • Matemáticas:
    La API de matemáticas(Maths), nos proporciona una gran colección de clases y métodos para el cálculo matemático. Por ejemplo, incluye los tipos de datos que comunmente se usan en la programación de videojuegos, tales como Vector2, Vector3, Vector4, Matrix, etc.. Además tambien incluye tipos de volumenes como BoundingBox, BoundingSphere y BoundingFrustum, que poseen métodos para la detección de colisiones.

    Las matemáticas en XNA a diferencia de DirectX(mano izquierda), usan por defecto el sistema de coordenadas basadas en la regla de la mano derecha(right-hand coordenate system). No obstante se podría utilizar la regla de la mano izquierda(left-hand coordenate System), en dicho caso, muchos cálculos matemáticos se deberían realizar por cuenta propia.


  • Almacenamiento:
    La API de almacenamiento(Storage), proporciona formas para leer y escribir los datos de los juegos, como por ejemplo, las partidas guardadas, puntuaciones o lo que se nos pueda ocurrir. En windows sería fácil, utilizariamos las clases del namespace System.IO, pero en XBox, es algo diferente, tendríamos que asignar un perfil para dispositivo de almacenamiento y controlar el estado del juego. La API de almacenamiento, "emula" que estamos en una única plataforma, por lo que utilizaremos el mismo código para guardar datos, indistintamente estemos en XBox, Windows o Zune.

Framework extendido, extensible o de extensión

El objetivo principal de esta capa es facilitar el desarrollo al programador.

Existen dos elementos principales en esta capa:

  • Modelo de aplicación:
    El proposito del modelo de aplicación(Application model) es el de apartar al programador de los problemas con la plataforma en la que se ejecuta el videojuego. No tendremos que preocuparnos, de crear una ventana para el juego o controlar los eventos del SO si estamos en windows. Tampoco nos preocuparemos de la creación de contadores de tiempo, bucle del juego, etc..

    También proporciona la clase GraphicsDevice, que se encarga de la creación y gestión de los dispositivos gráficos, y una GraphicsComponent que utilizaremos para el renderizado de las escenas, y que a su vez gestionar dicha GraphicsDevice.

    Además, en esta parte también se proporciona un modelo de componentes, que permite crear GameComponent para incluirlos a nuestros proyectos, ya esten hechos por nosotros mismos o por otras personas. Esto permite, si lo deseamos, crear nuestra librería de componentes y reutilizarlos en diferentes proyectos, asi como compartirlos con la comunidad.

  • Administrador de contenido (Content Pipeline):
    La Content Pipeline(en adelante CPL) permite a los desarrolladores incorporar contenidos multimedia a los proyectos de XNA, tales como imagenes, sonido, modelos 3d, efectos, etc... Facilita el acceso a estos archivos y nos proporciona una interfaz unificada sin una excesiva complejidad.

    Permite una amplia gama de formatos de archivos diferentes, que básicamente son los más utilizados en la creación de videojuegos. No obstante, es un número limitado, no soporta todos los formatos actuales, además de que muy comunmente, en la industria de los videojuegos, los desarrolladores utilizan archivos personalizados para sus proyectos, por lo que el CPL es extensible. Incorpora un marco de trabajo que permite facilmente incluir soporte a diferentes tipos de archivo.

    No me extenderé más en este punto, pues crearé un extenso artículo en referencia a la CPL de XNA.

Juegos

La capa mas alta del XNA. Aquí se encuentra el código del propio juego, incluyendo los componentes, los kits de inicio etc..

  • Kits de inicio: Hay multitud de kits de inicio para crear videojuegos, no se tiene que programar el juego desde el principio. Se pueden utilizar estos kits como punto de partida o simplemente para ojearlos, ver como están escritos y aprender de ellos.

  • Código: Sencilla y llanamente el código del juego.

  • Contenido: Archivos de imagen, sonido, etc...

  • Componentes: Los componentes creados por ti mismo o por otras personas.

1 comentario:

  1. He creado un tutorial para guardar y cargar en XNA Game Studio 3, para usuarios intermedios o mas que eso, aunque podrian darle una leida los principiantes tambien

    http://www.ikisoftware.com/2009/02/26/xna-game-studio-como-guardar-y-cargar-saves-en-el-xbox360/

    ResponderEliminar