sábado, noviembre 04, 2006

Cambios en XNA Beta 2

De vuelta ya por Madrid, sin haber tenido mucho tiempo para ponerme al día, estoy empezando a actualizarme acerca de los nuevos cambios acontecidos sobre XNA. En primer lugar, y tal y como anunciaban hace poco, el equipo de XNA ha liberado la versión de XNA beta 2. El comienzo de este blog se realizo con la versión Beta 1 en la calle, y de hecho todo lo que ha sido publicado fue realizado utilizando esta versión. Esto quiere decir que al trabajar ahora con la versión Beta 2, todo el código anterior no funcionara, aunque podría empezar a hacerlo con pequeños cambios.

Voy a intentar resumir en este post algunos de los cambios mas importantes que se han realizado. Afortunadamente para todos nosotros, se espera que entre la versión Beta 2 y la versión final, que se dice que saldrá en diciembre, no va a existir tantos cambios como ha ocurrido con este salto de la Beta 1 y Beta 2. Aquí esta el resumen de los cambios, extraído principalmente del blog oficial del equipo de XNA:

Cambios Genéricos:

- Inclusión del esperado “Content Pipeline”: Este componente permitirá añadir contenido a los juegos de una forma mucho más sencilla a lo que estábamos acostumbrados con la Beta 1. El “Content Pipeline” se define como un conjunto de herramientas que permitirá a los desarrolladores el añadir contenido 3D mas fácilmente a sus juegos, permitiendo reducir la curva de aprendizaje de desarrollar un juego en 3D.

- Arreglo de varios de bugs gracias al feedback que han hecho los usuarios de la Beta 1

- Eliminado el soporte para diseñar game y gamecomponents


Cambios en Game:


- El evento Starting y el método OnStarting han sido eliminados

- Se ha añadido Initialize que viene a reemplazar la función que tenia Starting

- Se ha añadido LoadGraphicsContent y UnloadGraphicsContent

- Se ha añadido BeginRun y EndRun

- Update y Draw ahora toman un parámetro, GameTime. El parámetro GameTime es una captura del tiempo transcurrido dentro de estos métodos.

- Todas las propiedades relacionadas con el tiempo han sido eliminadas de Game. Como se ha explicado anteriormente, ahora el tiempo se va a controlar con GameTime, por lo que estas propiedades ya no tienen sentido. NOTA: Menos mal que no me ha dado tiempo a escribir el articulo acerca del timing que tenia en mente, ya que a la salida de estos cambios se habria quedado obsoleto.

- Se ha BeginDraw y EndDraw, que permitirán que Game gestionar mejor los dispositivos. BeginDraw verificara que el dispositivo esta en preparado para ser usado, si no es así, el metodo Draw no es llamado. Esto elimina la necesidad de utilizar EnsureDevice, que es lo que se hacia con la Beta 1. EndDraw se encargara de llamar a Present por nosotros.

- UpdateComponents y DrawComponents han sido eliminados. Ahora se puede llamar a base.Update y base.Draw.


Cambios en Game Components


- Añadido el interfaz IGameComponents. Que es la implementación mínima requerida para ser insertada en Game.Components

- Añadido el interfaz IUpdateable, para todos esos componentes “lógicos” que no necesitan dibujar nada(es decir, tener un Draw)

- Añadido Enabled a través del interaz IUpdateable, el cual permite activar o desactrivar que un componente se actualice.

- Añadido UpdateOrder a través del interfaz IUpdateable, que permite controlar el orden en el que un componente se actualiza sin que importe el orden en el que fueron añadidos a la colección Game.Components. NOTA: en la beta 1, había que tener cuidado en que orden se añadían los componentes a la colección, ya que según el orden de añadido se creaba el orden de actualización.
- Añadido el interaz IDrawable, que permite a los componentes dibujarse independientemente del Update

- Añadido Visible a través del interfaz IDrawable, el cual tiene la misma función que UpdateOrder pero en vez de para el Update para el Draw.

- GameComponent provee una implementación por defecto de IGameComponent y IDrawable

- Añadido DrawableGameComponent que deriva de GameComponent y añade soporte a IDrawable. Tambien se ha eliminado la necesidad para el componente de preguntar por el servicio IGraphicsDeviceService, ahora se provee de la propiedad GraphicsDevice y , como ocurre en Game, se provee de LoadGraphicsContent y UnloadGraphicsContent

En definitiva estos son los cambios mas importantes que se han añadido. Si todavía no has trabajado con XNA y has hecho algunas pruebas es muy posible que te resulten un poco confusos. En realidad, yo estoy todavía intentando comprender alguno de ellos, ya que no he tenido suficiente tiempo como para explorar la primera beta cuando ha aparecido esta.

A partir de ahora, intentare incluir contenido que este seguro que no va a cambiar entre versiones, ya que puede parecer una perdida de tiempo empezar a comprender algo y que justamente te lo cambien en la siguiente versión. Desgraciadamente, no se sabe que va a cambiar desde hoy hasta la versión final, así que intentare crear el contenido acerca de lo que este totalmente seguro que no va a cambiar.

4 comentarios:

Anónimo dijo...

Hasta que no llegue la final no empezare a programar nada, no vaya a ser que luego no sirva o me tenga que comer la cabeza para adaptarlo...

mihe dijo...

Bueno, migrar de beta 1 a beta 2 no es muy complejo, y el salto siguiente sera mas pequeño. Asi que yo te recomiendo que hagas pequeñas pruebas, como estoy haciendo yo, antes de meterme en algo mas grande.

Un saludo y gracias por visitarme !

Anónimo dijo...

Hola, yo soy nuevo en esto, invente el control+Z pero no fue muy dificil ya que tenia a un grupos de compañeros en clase con los cuales vimos al bon jovi a U2 y toda esa pesca, hasta a un chico le hablaban las tias del ordenador. Todo esto montado con la beta de XNA por supuesto. mi pregunta es. ¿ Cual seria la alineacion?

Anónimo dijo...

Hola,

Gracias por tu aportación al mundillo del XNA para principiantes. Yo sí tengo experiencia en creación de juegos pero me he quedado un poco desfasado. Estoy poniéndome al día en DX y XNA y por eso te leo :)

En este artículo dices:

"Añadido Visible a través del interfaz IDrawable, el cual tiene la misma función que UpdateOrder pero en vez de para el Update para el Draw"

Creo que en vez de UpdateOrder querías decir Enabled ¿sí?