El framework de XNA

Hola a todos, el siguiente artículo es una traducción libre de este otro artículo escrito por Mitch Walker,escrito pocos días antes de lanzar la primer versión de XNA, espero que con este artículo comprendáis cómo está construido y por qué 🙂

Pues eso es todo, os dejo con el artículo:


¿Qué es el framework XNA?


XNA Game Studio permite a estudiantes y aficionados la creación de videojuegos mediante el lenguaje de programación C# sobre Windows, Xbox 360 y el reproductor de mp3 Zune.

El framework de XNA es un conjunto de librerías de .NET sobre las que los desarrolladores se apoyan para construir sus juegos.  Los siguientes puntos explicarán las tres claves para entender este marco de trabajo, llamadas: los objetivos de XNA, ¿qué es el framework de XNA?, y qué proporciona.

Objetivos

Se establecieron dos  objetivos principales durante el desarrollo de XNA:

Permitir desarrollo para varias plataformas

Uno de los objetivos es hacer  el desarrollo de juegos que corran sobre varias plataformas (PC, Xbox, Zune) de una forma sencilla. La idea fue la de poder crear un juego para Windows y rápidamente poder crear la versión para Xbox 360. En algunos casos habrá que diferenciar sobre varias plataformas, pero la idea era tener alrededor de un 95%  del comportamiento normalizado en un conjunto de APIs.

Simplificar el desarrollo de los juegos

Hacer juegos es difícil. Es difícil para profesionales y especialmente para estudiantes o aficionados que  acaban de empezar en este mundo. A menudo lleva mucho tiempo, demasiadas pruebas de acierto y error solamente para conseguir pintar por pantalla o para leer algún dispositivo  y hacer que algo se mueva. Uno de los objetivos de XNA es hacer esto de forma mucho más sencilla.

El objetivo de XNA es permitirnos empezar a escribir nuestro juego en los primeros momentos desde la creación del proyecto. No tendremos que preocuparnos sobre cómo crear una ventana, sobre eventos en pausa o cosas así. El framework de XNA se encargará de todas esas tareas por nosotros. Lo primero que haremos será escribir código para nuestro juego y no encargarnos de otros aspectos más técnicos.

Otro problema son los contenidos, especialmente poner contenido dentro del juego y hacer que se ejecute con este. Una característica de XNA llamada Content Pipeline permite añadir contenido a nuestros juegos de una manera tremendamente sencilla. El content pipeline se encargará de importar, compilar y cargarlo todo por ti.

Otro aspecto interesante son la serie de Starter Kits que se proporcionan. Un starter kit es un juego completo, completamente funcional que incluye todo el código y el contenido necesario como una plantilla. Esta plantilla puede seleccionarse en el menú de nuevo proyecto del Visual Studio. El objetivo es que si estás empezando en el mundo del desarrollo de juegos, al menos puedas sumergirte en un juego completo y poder tocar y cambiar cualquier cosa a tu antojo.

Cada starter kit viene con su documentación, incluyendo tutoriales que te guiarán para modificar o añadir características al juego.

Capas

Cuando se describe el framework de XNA y cómo está hecho, viene bien pensar en él como una serie de capas:

xna framework

Framework de XNA - Los recuadros verdes se corresponde con la funcionalidad que ya viene de "serie" con el framework.

Plataforma

La plataforma es la capa más baja compuesta por  las APIs sobre las que está construida XNA. Algunas de estas APIs son Direct3D 9, XACT, XInput y XContent.

Núcleo del framework

El núcleo es la “primera” capa de XNA y proporciona la funcionalidad que otras capas heredan. Aquí puedes encontrar distintas áreas agrupadas por funcionalidad, Gráficos, Audio, Datos Entrada, Matemáticas y Almacenamiento.

Framework extendido

La principal labor de esta capa es hacer del desarrollo de juegos algo fácil. Actualmente esta capa tiene dos componentes principales: el modelo de aplicación y el Content Pipeline.

Juegos

Los juegos son la capa más alta  (incluso aunque estén al final de esta lista!). Esta capa está formada por el código del juego y su contenido.

Características

Hemos hablado mucho sobre los objetivos de XNA y como se descompone en capas su funcionalidad, pero ¿qué hay realmente en XNA? Echemos un vistazo:

Modelo de aplicación (Application Model)

El propósito del modelo de aplicación es abstraernos de la plataforma donde se está ejecutando el juego y permitirnos centrarnos en escribir nuestro juego.  No tendremos que preocuparnos sobre cómo crear una ventana,  crear temporizadores o manejar mensajes. XNA nos proporciona todo eso.  De la misma manera también se nos ofrece el GraphicsComponent que hace increíblemente fácil la creación y manejo del GraphicsDevice (Dispositivo Gráfico), el cual usaremos para renderizar.

Aquí también es donde se proporciona el modelo de componentes, que nos permite incorporar GameComponents escritos por otros de manera inmediata en nuestro juego. Esta idea es genial para construir una biblioteca de componentes reutilizables.

Gráficos

El API gráfico está basado en el de Direct3D. Empezó siendo muy similar al de Managed DirectX (MDX) pero finalmente pasó una serie de refactorizaciones y limpiado haciéndolo incluso más fácil y consistente con las guías de diseño de .NET. Un gran cambio de MDX que incluyeron fue la supresión de las funciones fijas para el cauce gráfico a favor de un cauce gráfico programable a través de shaders.

Para aquellos que todavía no saben escribir shaders XNA incorpora una clase básica llamada BasicEffect que podremos usarla para pintar rápidamente sin tener que programar nada extra. Una vez aprendamos a escribir nuestros propios shaders podremos sustituir esta clase básica para incluir nuestros propios ficheros.

Audio

El API de audio está construido sobre XACT (aunque XNA ya soporta reproducción de archivos .wma y .mp3), la multi plataforma de audio de Microsoft para Windows y Xbox360. La idea detrás de XACT es similar a la de los shaders con Direct3D. La herramienta XACT crea “paquetes” de efectos de sonido pudiendo configurar aspectos como el volumen, looping, mezclado de canales etc. Los desarrolladores luego cogen el paquete, lo cargan y en seguida pueden reproducir los archivos por su nombre, sin tener que inicializar buffers, streaming de datos u otro tipo de inicialización.

Dispositivos de entrada

El API para los dispositivos de entrada está construida sobre XInput, el API que dirige a los controles de la Xbox 360. Ofrece un modo inmediato que no requiere inicialización. No hay que preocuparse sobre adquirir o liberar un dispositivo, establecer el modo compartido, etc. Lo único que necesitamos es llamar a GetState sobre el tipo de controlador apropiado y ya está.

Además se proporciona un tipo llamado GamePad que representa a los mandos de Xbox360 y Windows, así como para el teclado y el ratón.

Almacenamiento

El API de almacenamiento proporciona la forma en la que podemos leer y escribir datos (como partidas grabadas, lista de máximas puntuaciones, etc.) de forma independiente a la plataforma donde se esté ejecutando el juego.  En Windows es bastante sencillo ya que tenemos clases de entrada y salida para manejar todo esto. En la Xbox 360, necesitamos  asociar un game state con un perfil y un dispositivo de almacenamiento, como el disco duro o una unidad de memoria. Pero de nuevo todo esto se consigue de manera sencilla y transparente para el desarrollador, de forma que el mismo código para Windows servirá para un juego de Xbox 360.

Matemáticas

XNA incluye los tipos más usados para la programación de juegos como Vectores de dos, tres y cuatro componentes, matrices, planos, rayos. También se incluyen  boundingBox, boundingSpheres y BoundingFrustrum. Estos volúmenes incluyen métodos para hacer  test de intersecciones y poder detectar colisiones por ejemplo.

Gracias de nuevo por haber leido el post, espero que ahora quede más claro como es internamente este framework de desarrollo de videojuegos, si tenéis alguna duda o sugerencia podéis dejar un comentario, hasta la próxima!

¿Qué es el framework XNA?

XNA Game Studio permite a estudiantes y aficionados la creación de videojuegos mediante el lenguaje de programación C# sobre Windows, Xbox 360 y el reproductor de mp3 Zune.

El framework de XNA es un conjunto de librerías de .NET sobre las que los desarrolladores se apoyan para construir sus juegos.  Los siguientes puntos explicarán las tres claves para entender este marco de trabajo, llamadas: los objetivos de XNA, ¿qué es el framework de XNA?, y qué proporciona.

Objetivos

Se establecieron dos  objetivos principales durante el desarrollo de XNA:

Permitir desarrollo para varias plataformas

Uno de los objetivos es hacer  el desarrollo de juegos que corran sobre varias plataformas (PC, Xbox, Zune) de una forma sencilla. La idea fue la de poder crear un juego para Windows y rápidamente poder crear la versión para Xbox 360. En algunos casos habrá que diferenciar sobre varias plataformas, pero la idea era tener alrededor de un 95%  del comportamiento normalizado en un conjunto de APIs.

Simplificar el desarrollo de los juegos

Hacer juegos es difícil. Es difícil para profesionales y especialmente para estudiantes o aficionados que  acaban de empezar en este mundo. A menudo lleva mucho tiempo, demasiadas pruebas de acierto y error solamente para conseguir pintar por pantalla o para leer algún dispositivo  y hacer que algo se mueva. Uno de los objetivos de XNA es hacer esto de forma mucho más sencilla.

El objetivo de XNA es permitirnos empezar a escribir nuestro juego en los primeros momentos desde la creación del proyecto. No tendremos que preocuparnos sobre cómo crear una ventana, sobre eventos en pausa o cosas así. El framework de XNA se encargará de todas esas tareas por nosotros. Lo primero que haremos será escribir código para nuestro juego y no encargarnos de otros aspectos más técnicos.

Otro problema son los contenidos, especialmente poner contenido dentro del juego y hacer que se ejecute con este. Una característica de XNA llamada Content Pipeline permite añadir contenido a nuestros juegos de una manera tremendamente sencilla. El content pipeline se encargará de importar, compilar y cargarlo todo por ti.

Otro aspecto interesante son la serie de Starter Kits que se proporcionan. Un starter kit es un juego completo, completamente funcional que incluye todo el código y el contenido necesario como una plantilla. Esta plantilla puede seleccionarse en el menú de nuevo proyecto del Visual Studio. El objetivo es que si estás empezando en el mundo del desarrollo de juegos, al menos puedas sumergirte en un juego completo y poder tocar y cambiar cualquier cosa a tu antojo.

Cada starter kit viene con su documentación, incluyendo tutoriales que te guiarán para modificar o añadir características al juego.

Capas

Cuando se describe el framework de XNA y cómo está hecho, viene bien pensar en él como una serie de capas:

Plataforma

La plataforma es la capa más baja compuesta por  las APIs sobre las que está construida XNA. Algunas de estas APIs son Direct3D 9, XACT, XInput y XContent.

Núcleo del framework

El núcleo es la “primera” capa de XNA y proporciona la funcionalidad que otras capas heredan. Aquí puedes encontrar distintas áreas agrupadas por funcionalidad, Gráficos, Audio, Datos Entrada, Matemáticas y Almacenamiento.

Framework extendido

La principal labor de esta capa es hacer del desarrollo de juegos algo fácil. Actualmente esta capa tiene dos componentes principales: el modelo de aplicación y el Content Pipeline.

Juegos

Los juegos son la capa más alta  (incluso aunque estén al final de esta lista!). Esta capa está formada por el código del juego y su contenido.

Características

Hemos hablado mucho sobre los objetivos de XNA y como se descompone en capas su funcionalidad, pero ¿qué hay realmente en XNA? Echemos un vistazo:

Modelo de aplicación (Application Model)

El propósito del modelo de aplicación es abstraernos de la plataforma donde se está ejecutando el juego y permitirnos centrarnos en escribir nuestro juego.  No tendremos que preocuparnos sobre cómo crear una ventana,  crear temporizadores o manejar mensajes. XNA nos proporciona todo eso.  De la misma manera también se nos ofrece el GraphicsComponent que hace increíblemente fácil la creación y manejo del GraphicsDevice (Dispositivo Gráfico), el cual usaremos para renderizar.

Aquí también es donde se proporciona el modelo de componentes, que nos permite incorporar GameComponents escritos por otros de manera inmediata en nuestro juego. Esta idea es genial para construir una biblioteca de componentes reutilizables.

Gráficos

El API gráfico está basado en el de Direct3D. Empezó siendo muy similar al de Managed DirectX (MDX) pero finalmente pasó una serie de refactorizaciones y limpiado haciéndolo incluso más fácil y consistente con las guías de diseño de .NET. Un gran cambio de MDX que incluyeron fue la supresión de las funciones fijas para el cauce gráfico a favor de un cauce gráfico programable a través de shaders.

Para aquellos que todavía no saben escribir shaders XNA incorpora una clase básica llamada BasicEffect que podremos usarla para pintar rápidamente sin tener que programar nada extra. Una vez aprendamos a escribir nuestros propios shaders podremos sustituir esta clase básica para incluir nuestros propios ficheros.

Audio

El API de audio está construido sobre XACT (aunque XNA ya soporta reproducción de archivos .wma y .mp3), la multi plataforma de audio de Microsoft para Windows y Xbox360. La idea detrás de XACT es similar a la de los shaders con Direct3D. La herramienta XACT crea “paquetes” de efectos de sonido pudiendo configurar aspectos como el volumen, looping, mezclado de canales etc. Los desarrolladores luego cogen el paquete, lo cargan y en seguida pueden reproducir los archivos por su nombre, sin tener que inicializar buffers, streaming de datos u otro tipo de inicialización.

Dispositivos de entrada

El API para los dispositivos de entrada está construida sobre XInput, el API que dirige a los controles de la Xbox 360. Ofrece un modo inmediato que no requiere inicialización. No hay que preocuparse sobre adquirir o liberar un dispositivo, establecer el modo compartido, etc. Lo único que necesitamos es llamar a GetState sobre el tipo de controlador apropiado y ya está.

Además se proporciona un tipo llamado GamePad que representa a los mandos de Xbox360 y Windows, así como para el teclado y el ratón.

Almacenamiento

El API de almacenamiento proporciona la forma en la que podemos leer y escribir datos (como partidas grabadas, lista de máximas puntuaciones, etc.) de forma independiente a la plataforma donde se esté ejecutando el juego.  En Windows es bastante sencillo ya que tenemos clases de entrada y salida para manejar todo esto. En la Xbox 360, necesitamos  asociar un game state con un perfil y un dispositivo de almacenamiento, como el disco duro o una unidad de memoria. Pero de nuevo todo esto se consigue de manera sencilla y transparente para el desarrollador, de forma que el mismo código para Windows servirá para un juego de Xbox 360.

Matemáticas

XNA incluye los tipos más usados para la programación de juegos como Vectores de dos, tres y cuatro componentes, matrices, planos, rayos. También se incluyen  boundingBox, boundingSpheres y BoundingFrustrum. Estos volúmenes incluyen métodos para hacer  test de intersecciones y poder detectar colisiones por ejemplo.

Thanks for taking the time to read this post. I hope it explained what the XNA Framework is and what it provides.  The beta will be released in just a few days, so please download it and take it for a spin. Then tell us what you liked, what you disliked, or what wasn’t clear—we want to make this the best product for you that we can.

4 pensamientos en “El framework de XNA

  1. Pingback: Xna Framework | TagHall

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s