XNA

¿Qué es XNA?

XNA Framework es una serie de librerías y aplicaciones construidas sobre el .Net Framework 2.0 de Microsoft que proveen a los lenguajes .Net un conjunto de herramientas con el objetivo de programar videojuegos. XNA no son unas siglas. XNA no es un acrónimo de nada, no significan nada. XNA es el nombre propio de la tecnología.

Junto con el XNA Framework se ha puesto a disposición de los desarrolladores el XNA Game Studio Express Edition, que es un entorno de desarrollo basado en Visual C# Express Edition, para facilitar la utilización de las tecnologías XNA y la creación de videojuegos.

¿Cómo funciona XNA?

El XNA Framework se compone de dos librerías (dll) que funcionan sobre el .Net Framework 2.0 y proporcionan una conexión entre el código manejado de los lenguajes .Net y la librería de sistema para multimedia por excelencia de Microsoft: DirectX.

El modelo de programación en XNA es un modelo basado en componentes y contenedores. El juego (clase Game) es en sí mismo el contenedor de todos los componentes (clases GameComponent y DrawableGameComponent) y se encarga de manejarlos automáticamente, lo que evita mucho trabajo de estructuración y programación al desarrollador.

Todos los GameComponent tienen su método Update donde se encuentra la lógica del juego para ese componente. Los DrawableGameComponent además añaden el método Draw, que contiene las órdenes para renderizar el componente. Estos métodos se llaman automáticamente y pueden ser reescritos para crear componentes personalizados.

¿En qué se diferencia XNA de DirectX?

El XNA Framework está concebido como una capa de abstracción sobre DirectX para permitir a los lenguajes .Net acceder a las funciones de DirectX, pero es bastante más que eso.

Además de proveer una capa de abstracción, provee de un modelo de programación intuitivo y fácil de utilizar, orientado a la programación de videojuegos y basado en componentes. Aunque XNA utiliza las funciones de DirectX por debajo, proporciona un acceso más intuitivo con clases y funciones más fáciles de usar desde arriba.

XNA no sustituye a DirectX, en realidad, lo utiliza, y se irá adaptando a medida que aparezcan nuevas librerías DirectX.

¿En qué se diferencia XNA de Managed DirectX?

Managed DirectX (MDX) fue la primera aproximación de Microsoft para proveer de un acceso manejado desde los lenguajes .Net a DirectX. Se trataba de un mapeo “tal cual” de las clases y funciones de DirectX, lo que se suele llamar un “wrapper”.

XNA extiende esta función de MDX y no solo provee un acceso a DirectX, sino que provee un verdadero sistema de trabajo orientado a la programación de videojuegos. Oculta las funciones gráficas complicadas de DirectX en clases y funciones más intuitivas y provee al desarrollador de un modelo de programación robusto, sencillo y versátil.

XNA sí sustituye a MDX, que no verá más revisiones más allá de las últimas betas, community previews y release candidates de MDX 2.0.

¿Qué es XNA Game Studio Express Edition?

El XNA Game Studio Express Edition (GSEE) es el entorno de programación (IDE) que se ha preparado para trabajar con el XNA Framework. Integra algunas de las mayores ventajas del XNA Framework para que en un par de clics se consiga lo mismo que con un buen número de líneas de código. Por ejemplo integra el cargador de contenidos mediante el Content Pipeline y la creación de proyectos predefinidos.

El XNA GSEE está hecho para funcionar sobre el Visual C# Express Edition, por lo cual este es un requisito. Pero eso no quiere decir que sólo se puede programar contra el XNA Framework con C# o con el XNA GSEE.

El XNA Framework se conforma de dos librerías construidas de manera totalmente orientada al .Net Framework 2.0. Como consecuencia, pueden referenciarse desde cualquier proyecto .Net, sea cual sea el lenguaje escogido para el proyecto. Por supuesto, utilizar el XNA GSEE tiene muchas ventajas, pero no implica que se tenga que usar C# obligatoriamente para usar el Framework.

¿Cuánto cuesta desarrollar juegos con XNA?

Programar con XNA no cuesta nada. De verdad, es gratis. Microsoft ha preferido usar de cobayas a los “frikis” de los videojuegos y por eso ha sacado el Framework y la herramienta para usarlo (XNA GSEE) para ellos, gratuitamente. Así que desarrollar juegos o componentes es totalmente gratis.

Probarlos, sin embargo, puede costarte dinero. La implementación de videojuegos para Windows es totalmente gratuita y libre de cargos. Es decir, puedes hacer todos los juegos que se te ocurran para el XNA Framework de Windows, porque no te van a cobrar. Para probar tus videojuegos (o los de cualquier otra persona) en tu XBox 360, sin embargo, sí que hay que pagar una suscripción al servicio de Creator’s Club de Microsoft. De todas maneras no es nada caro. Por 99$ al año puedes hacer y probar tantos juegos XNA en XBox 360 como te de la gana.

¿Qué necesito para desarrollar juegos con XNA para ordenador?

Básicamente, lo único que necesitas para programar con XNA son ganas. Pero, claro, también hay aspectos técnicos a tener en cuenta. Son los siguientes:

Si tienes poca experiencia en la programación con .Net, C#, o programación de videojuegos, necesitarás pedir un poco de ayuda. El XNA GSEE instala una parte de la ayuda que puedes encontrar en msdn.com/xna pero también puedes buscar ayuda en los innumerables foros y grupos que se han creado alrededor de XNA. Entre ellos, XNACommunity.

¿Qué necesito para desarrollar juegos con XNA para XBox 360?

Para programar con XNA para XBox 360 necesitas exactamente lo mismo que para programar para PC, con una pequeña diferencia, en lugar de una tarjeta gráfica con soporte para shaders 1.1 o superior necesitas una XBox 360 con Creator’s Club activado para poder hacer tus pruebas.

¿Qué necesito para jugar a mis juegos XNA en el ordenador?

Puedes jugar a tus juegos XNA en cualquier PC Windows que tenga instalado:

A partir de la versión 1.1 de XNA, además podrás distribuir tus juegos en forma de paquetes, para que sea más fácil compartirlos con otras personas.

¿Qué necesito para jugar a mis juegos XNA en XBox 360?

Evidentemente, necesitas una XBox 360. Además tendrás que suscribirte a Creator’s Club, que es la licencia que hay que pagar a Microsoft para poder jugar a juegos XNA. Cuesta 49$ cada cuatro meses o 99$ cada año.

13 respuestas

19 04 2007
Ya tenemos FAQ « XNACommunity Blog

[...] XNA [...]

23 04 2007
Lucas

Estoy en un problemita, tengo un juego en XNA y necesito penerle un video, no importa la extension, pero preferiblemente . avi, si algun me puede decir porfa como importar en video, se lo agradezco de antemano…

24 04 2007
neozack

Hola, Lucas.

Primero y principal, gracias por tu comentario. ¡Eres el primero! ¿Deberíamos darte un premio o algo así? Je, je.

Y ahora tu respuesta. XNA en su versión 1.0 no soporta la carga de contenidos más allá de los básicos que hacen falta para generar videojuegos puros y duros. Eso incluye texturas, modelos 3D, etc. Pero, por ponerte un ejemplo, las texturas 3D serán añadidas en la versión 1.1 que llegará este mismo mes. Es lo que tiene ser una tecnología joven. Evidentemente le faltan muchas cosas, incluyendo el renderizado de fuentes, que todo el mundo echa en falta. Y una de las cosas que faltan es la carga de vídeos, sea cual sea su formato.

Lo que sí incluye XNA (que le da una enorme versatilidad y dinamismo) es un Content Pipeline (cargador de contenidos) programable. Básicamente eso quiere decir que si algo no se puede cargar con el sistema XNA básico, puedes crearlo fácilmente. Eso es lo que pasa con todo lo anterior.

Aquí hay una dirección donde puede que encuentres lo que buscas. Es un adaptador al content pipeline para cargar el contenido. Por lo visto luego se puede dibujar en pantalla como dibujarías una textura con un SpriteBatch. Te recuerdo que es de alguien que necesitaba lo mismo que tú y lo programó él mismo, así que es posible que no funcione espectacularmente bien, ¿eh?

Y de nuevo, ¡gracias por tu comentario!

27 04 2007
tomasperez

Hola!! aqui os dejo una explicación de mi GameComponent Cocodrilo que os podeis descargar de http://www.codeplex.com/XNAcommunity (aqui aparece como muevePersonaje).

Bueno, los atributos que declaro al principio son básicamente:

1.-La posicion del cocodrilo en pantalla (Vector2d)

2.-Un array de texturas en el que almaceno todas las texturas del personaje. Cada una de las texturas es digamos un fotograma del cocodrilo en movimiento de forma que pasadas una detrás de otra de forma rápida, da sensación de movimiento.

3.-El spriteBatch que es básicamente el objeto que se encarga de dibujar en pantalla

4.-También defino una variable private float updateTime que va a controlar las veces que se ejecuta el método update. Esto lo hago así porque el método update se llama unas 60 veces por segundo, y utilizando la variable como vereis en dicho método conseguimos que se ejecute unas 15 veces de forma que nuestro personaje no se mueve tan rápido ( podéis provar vosotros mismos lo que pasa)

5.- Y por último defino una serie de enteros que van a ser los encargados de indexar el array de texturas. Por ejemplo si el cocodrilo se mueva hacia arriba el spriteBatch solo tendrá que dibujar las texturas del cocodrilo andando hacia arriba.

Después de esto podemos ver que en el método inicialize se inicializan los punteros que indexan el array además del spriteBatch y demás objetos. En el método LoadGraphicsContent simplemente cargamos las texturas en el content pipeline.

En el método update se limita a llamar a mueveCocodrilo() que es el método encargado de capturar las teclas que se estén pulsando en ese momento y dependiendo de ello se llamarán a los métodos responsables de actualizar tanto la posición del cocodrilo como la textura que tiene que mostrar el spriteBatch. Por ejemplo, si pulsamos la tecla de dirección “arriba” se llamará al método :
private void actualizaTextura_Norte()
{
posicion.Y -= 6; //actualiza la posición del cocodrilo
norte++; //actualiza el indice del array
nTextura = norte; //nTextura es la variable que utilizo para indexar el array (ver método draw)

if (nTextura > 15) //si se llega al final de las texturas de movimiento hacia arriba se restaura el valor para que las siga mostrando
{
nTextura = 8;
norte = 7;
}
}

Una de las posibles mejoras que podríamos hacerle sería en vez de tener un array de texturas, tener una sola textura y tener un array de strings (cada uno será el path de donde están almacenadas las texturas) de esta forma se ahorrará algo de espacio.

Bueno, básicamente este es el funcionamiento de mi componente espero que os sirva de ayuda!!!
Saludos!!

26 02 2008
Yon

Tengo una duda, ejemplo, creo un jueguito en xna para xp y funciona prefectamente etc etc, ¿luego puedo sin modificar nada o muy poco pasarlo para el 360 ?

Esta muy bueno ir probando en la tv con el 360, pero preferiria primero adaptarme a XNA, hacer pruevas en el pc y luego pagar todo lo que haga falta.

PD: los juegos que se hacen para xp, se pueden quemar en un cd para hacerlos mas profecionales, con un instalador y esas cosas bonitas?

26 02 2008
neozack

Efectivamente, el motor de XNA es el mismo tanto para Windows como para XBox 360, la diferencia es que el conjunto de librerías de XBox 360 está un poco recortado. Por eso se le llama XNA Compact Framework.
Las limitaciones que XBox360 plantea para XNA sin embargo, son muy pocas. No obstante sí exige que un juego inicialmente creado para Windows sea portado a XBox3 360. La ventaja con XNA es que no tendrás que retocar el código de ninguna de tus clases del modelo de negocio y muy poco o nada de tus GameComponents y DrawableGameComponents.
En cuanto a tu segunda pregunta, desde XNA Game Studio 2.0 tus juegos pueden incorporarse a un archivo único para compartirlos con otras personas, sea por internet o grabándolos en un CD. Por supuesto, siendo código .Net puedes hacer con ellos todo lo que se puede hacer con cualquier otra aplicación .Net, como por ejemplo, añadirles un instalador.

17 04 2008
Hector

Que pena… soy nuevo en esto y deseo saber donde puedo hacer los graficos para llamarlos desde el programa; me han dicho que con sprite, hay algun otro graficador?, y que requerimientos se necesita de maquina(tajeta de video)?
Agradezco su ayuda

14 11 2008
Cheho

che no encuentro nada como para empezar a programar en xna, si alguien tiene por favor es para presentar en la facu Gacias
con cariño chechis

5 06 2009
Xergio

Hola, yo nquiero empezar a utilizar XNA, pero no tengo ningun tutorial en español, y no tengo internet, es posible que me provean un tutorial y lo envien a mi correo

18 08 2009
neozack

Xergio, hay muchos sitios donde buscar información sobre XNA, pero necesitarás Internet. También existen libros sobre el tema, pero los ejemplos más interesantes te los encuentras siempre en la Red. En la página del Creators Club de XNA tienes un mogollón de ejemplos.

Si necesitas otro tipo de material… te recomiendo que pidas a la biblioteca de tu barrio que pidan algún libro de programación básica de videojuegos con XNA para poderlo coger.

De todos modos, XNA viene con una librería de ayuda que debería funcionarte si sabes programar un poco con .Net.

5 08 2009
Daniel Castro

hola alguen sabe si puedo exportar modelos de otros programas al xna en este caso serian hechos en maya y retocados en zbrush y texturizados en maya y despues exportados al xna esto es posible de realizar

18 08 2009
neozack

Sí, puedes. El Content Pipeline se encarga de compilar estos modelos y transportarlos a un formato (si no recuerdo mal es xba) que XNA puede entender. Todos estos programas que me dices están contemplados de serie en XNA. Si te encuentras con algún formato que no viene integrado con el Content Pipeline, busca una extensión para el mismo. Suelen proveerla los propios programadores del programa de diseño que uses. De todos modos Maya y ZBrush tienen formatos que XNA reconoce nativamente.

12 11 2009
Azran

Se busca una persona apasionada del mundo de la creación de los videojuegos para colaborar escribiendo sobre XNA, noticias, juegos, codigo, etc. Unete a nuestro grupo que estará compuesto por 3 bloggers expertos para desarrollarnos y aprender de este fascinante mundo, compartiendo ideas y quien sabe a lo mejor nuevos proyectos. Si encajas en el perfil puedes enviarme un mail a xnablog @ gmail.com (todo junto).

Deja un comentario