miércoles, abril 25, 2007

XNA 1.1 - Refréscate

Tras una intensa espera, el XNA Team liber la primera revisión de XNA.
Se trata de una revisión simple, con unas cuantas funcioncillas añadidas. Por lo visto el renderizado de texto por fin se escuentra como una de ellas. Podéis leer la noticia aquí.

jueves, abril 19, 2007

Mono.Xna resurge de sus cenizas

Mono.Xna, el proyecto para desarrollar un framework equivalente al XNA de Microsoft sobre Mono y librerías gráficas de código libre recupera el tiempo perdido.

Desde que en Diciembre del año pasado apareciera en nuestras vidas la versión 1.0 de XNA las cosas se han revuelto mucho. No es simplemente la aparición simultánea de enormes comunidades de desarrolladores (noveles y no noveles) para esta nueva plataforma, sino las grandes posibilidades que la nueva estructura de programación en XNA provee.

Y es que lo verdaderamente interesante es que, al estar construida sobre el .Net Framework, hereda todas las propiedades que este le da a los ensamblados, entre ellas, la posibilidad de funcionar en multiplataforma. La primera aplicación para esto, evidentemente, es la que Microsoft le ha querido dar, permitir compilar ensamblados para Windows PC y para XBox 360, pero hay más.

Evidentemente soportándose en librerías de código libre y no en DirectX, Mono.Xna pretende hacer un set de librerías que funcione igual que XNA pero sobre Mono. Esta aproximación al XNA Framework es todavía más interesante si cabe, puesto que permitirá en el futuro que cualquier juego para XNA funcione inmediatamente sobre una plataforma no-Microsoft sin siquiera tener que volver a generar los ensamblados. Este proyecto, que lleva desde Noviembre funcionando, ahora resurge de sus cenizas.

Debido a algunos cambios en el núcleo mismo del proyecto, el servidor de SVN, el sitio donde se alojaba el wiki, etcétera, el proyecto se paralizó durante unos meses desde principios de Febrero. Otras cosas que se añadieron al problema fueron que algunos (bastantes) de los colaboradores somos estudiantes y en Febrero tenemos exámenes. También se paralizó porque, aunque había mucho código funcionando, puesto que el objetivo era una compatibilidad 100% con XNA, había que generar muchos tests unitarios, cosa que es bastante complicada tratándose de aplicaciones de bucle contínuo.

Así que hasta ayer, el proyecto no había avanzado gran cosa. Pero ayer tras un parche de proporciones descomunales con una amplia batería de tests unitarios que Stuart Carnie envió a los coordinadores del proyecto, parece que Mono.Xna de nuevo recupera la funcionalidad de antaño. Las clases gráficas que soportan todo el renderizado ya están funcionando y vuelve a funcionar el proyecto "Pong" de ejemplo.

Falta la revisión del código por parte de los coordinadores para subir el parche al repositorio pero, a más tardar este fin de semana, me veo jugando al Pong en mi SUSE Linux con Mono y Mono.Xna.

Finalmente, me gustaría recordar que todos aquellos que seáis fans de las tecnologías XNA y queráis apuntaros a ver cómo funcionan por dentro y a trabajar un poquito en su implementación, podéis hacerlo. Muchos de los que trabajan en el proyecto no son expertos en programación gráfica o de videojuegos; de hecho muchos son estudiantes, pero todos tenemos las mismas ganas de multiplataformizar el mundo, especialmente en lo que se refiere a los videojuegos.

miércoles, abril 11, 2007

Nuevo componente añadido en XNACommunity

Los componentes son la esencia de los juegos XNA y la base de la simplicidad en el desarrollo. Uno muy interesante (en realidad dos) acaban de subir a XNACommunity.

Los componentes en cuestión son GameState y GameStateManager que colaboran en el trabajo de manejar los estados de una aplicación tan compleja como puede llegar a ser un videojuego.

El modelo de programación de XNA nos obliga a generar una enorme cantidad de GameComponents. Por supuesto esto simplifica muchísimo el sistema de programación y reutilización de código ya que encapsula funcionalidades de una manera intuitiva y automática. Lo difícil llega cuando tenemos que gestionar miles de GameComponents a la vez. En proyectos relativamente pequeños, no será difícil tener que gestionar cientos de GameComponents; en proyectos mayores, la cifra puede incrementarse. Saber cuándo hay que activar o desactivar cada GameComponent y, lo que es más, organizar el código para que el videojuego lo haga y sea intuitivo al programador, puede ser imposible.

Para eso existen los GameState, o los estados del juego. Cada estado refleja una situación en la que se encuentra el juego. Puede ser desde un simple "pausa" y "no pausa" a una estructura más elaborada en que cada estado contenga un nivel del juego o una pantalla. Visto así, el GameState se conforma como una clase contenedora de otras clases que debe de encargarse de manejarlas correctamente en el momento apropiado.

Un GameState se encarga, por lo tanto, de registrar sus GameComponents asociados en el objeto Game cuando se activa, y des-registrarlos cuando se desactiva.

Por supuesto, no tiene sentido tener más de un estado de juego activo al mismo tiempo. Por ejemplo, es absurdo tener activos los estados "pausa" y "no pausa" al tiempo, o los niveles 5 y 9 a la vez. Por eso necesitamos un GameStateManager que se encargue de gestionar la activación y desactivación de los GameState.

Para más información sobre el tema, podéis dirigiros a XNACommunity, donde está publicado el componente con su ejemplo de uso. Hay otros ocho componentes adicionales y la comunidad está abierta a más colaboradores con ideas interesantes y, sobre todo, con ganas de aprender. Todos somos novatos alguna vez, y los genios de verdad lo son siempre. Así que no tengáis miedo y apuntaros. Os esperamos.

martes, abril 10, 2007

Comuniicate con Wiimote

Desde que Wii salió al mercado (en realidad muchiisimo tiempo antes) las expectativas que la consola y en particular la nueva apuesta por revolucionar la jugabilidad empezaron a ilusionar a todos los jugones. Wiimote, el mando estándar de Wii ha roto moldes indudablemente, pero puede hacer mucho más.

El nombre en código de Wii fue Revolution y, aunque mucho misterio envolvía a esta consola hasta su presentación en sociedad el año pasado, todos los jugones (y fans de Nintendo, entre los que me cuento) estaban desesperando por ver, tocar y jugar con la nueva maravilla de la imaginación de la gran N.

Además de fan de Nintendo, sin embargo, soy fan de .Net (no necesariamente de Microsoft) y la idea de utilizar las ventajas de Wiimote en mi PC via .Net siempre es una maravillosa noticia. Ya oí hace unos meses de un friki que, nada más conseguir su Wiimote lo conectó con su Mac, pero la frikada de hoy bien merece un estudio eshaustivo.

Ziggyware.com ha publicado un vídeo en YouTube donde se muestra cómo un Wiimote puede controlar un videojuego hecho con XNA sobre .Net. Aquí os lo dejo.

Lo interesante en realidad, al menos para tiralíneas de código como yo, no es que el ordenador responda a un Wiimote conectado por bluetooth. En realidad, eso es relativamente simple... siempre y cuando tengamos una API para recibir los datos del Wiimote y poder trabajar con ellos. ¿Os gustaría tenerla? Pues en ziggiware.com lo tienen. Aquí os dejo el link para su descarga. A ver qué hacéis con vuestras Wii.

lunes, abril 09, 2007

Nuclex.Fonts - Renderizando fuentes con XNA

Si hay alguna funcionalidad necesaria para la programación de videojuegos que XNA no facilita ésa es la del renderizado de caracteres (o fuentes). Nuclex intenta solucionar el problema usando el modelo de programación de .net y XNA de manera sencilla.
Creo que todos coincidimos en que el renderizado de fuentes por pantalla es una función imprescindible de los videojuegos. Sin embargo, por desgracia, XNA, a pesar de su enorme versatilidad y su API sencilla y amigable, falla enormemente en este aspecto no proporcionando un sistema de rederizado de fuentes.

Sin embargo, lo que sí proporciona XNA es un modelo de programación fácilmente extensible. Por eso, una vez registrada la necesidad de funcionalidad, es fácil preparar un parche que nos cubra la necesidad. Yo ya he visto varios por la red, pero uno de los más sencillos (si no el que más) es la librería de componentes de Nuclex.

La gran ventaja de Nuclex es que está completamente integrado con el modelo de programación de XNA, basado en componentes. En realidad, la dll que nos proporciona nos ofrece un componente llamado TextManager, que podemos incluír en nuestro juego como haríamos con cualquier otro componente. Los métodos Update y Draw ya están definidos y el único problema se plantea a la hora de cargar la fuente que queremos utilizar en pantalla.

Nuclex.Fonts nos soluciona ese problema, porque además de proporcionarnos el componente para renderizar fuentes, nos proporciona la extensión del Content Pipeline para cargarlas en nuestro juego como cargaríamos cualquier tipo de contenido. Para saber qué hay que hacer y cómo, podéis ver el tutorial (en inglés).

Los resultados son verdaderamente sorprendentes. Cualquier fuente TrueType puede ser renderizada en pantalla con muchísima facilidad. Una simple llamada a la función DrawString nos permitirá renderizar lo que queramos por pantalla. Estoy deseando empezar a usarlo en mi proyecto de Juegos y Realidad Virtual. ¿Y vosotros? Si queréis os podéis bajar el código fuente de la solución aquí.

domingo, abril 08, 2007

Xna Community

La comunidad de codeplex dedicada a la generación de una librería de componentes para XNA llega a sus 1000 visitas.

A aquellos a los que nos gusta XNA nos gusta conocer gente a quien también le gusta XNA. Por ellos se han creado tantísimas comunidades en Internet desde el lanzamiento de esta plataforma-tecnología. Una de ellas, dirigida a entusuastas españoles, es XNACommunity alojada en el servidor CodePlex.

XNACommunity libera su código de manera similar a como lo hacen la mayoría de los proyectos Open Source. Utiliza, como (posiblemente) todos los proyectos de CodePlex, la licencia de Software Libre made by Microsoft (Microsoft Community License). En esencia, permite a cualquier persona reutilizar, modificar y redistribuir el código protegido bajo la licencia, de manera similar a otras licencias de código abierto.

El proyecto está abierto a cualquier persona, pero está especialmente dirigido a estudiantes entusiastas de los videojuegos y a miembros de los DotNetClubs de España. No obstante, como digo, cualquiera puede colaborar.

Hasta el momento, la comunidad ha creado y publicado ocho componentes (un marcador, un cubo, una cámara que sigue a un objeto, una cámara que realiza una ruta, un recorrido sobre texturas 2D, un componente que mueve una imagen por la pantalla, un scroll de pantalla y una bola que rebota). Por supuesto, si estás experimentando con XNA y quieres hacer público tu trabajo, eres bienvenido a la comunidad.

Además de la comunidad, donde puedes encontrar un wiki actualizado con las noticias y los últimos componentes actualizados entre otros, puedes acceder al foro de la comunidad, alojado con el resto de foros de los DotNetClubs, donde puedes preguntar y recibir respuesta a tus dudas sobre XNA o compartir lo que sabes con otros usuarios.

martes, febrero 20, 2007

XNA Challenge en la UA

Desde el pasado 19 de Febrero y hasta el Viernes día 23 se celebran las jornadas XNA Challenge y Imagine Cup Developer Center en las Universidad de Alicante

Desde que el Miércoles 14 y el Jueves 15 de febrero se iniciaron las Jornadas Tecnológicas de la Universidad de Alicante, el Club .net de Alicante ha estado muy ocupado.

El 14 de Febrero se presentaron en la Universidad las charlas LOVE (Lanzamiento de Office, Vista y Exchange). La presentación se centró en presentar las novedades de las interfaces de los nuevos programas así como las novedades incluídas de serie con el .net Framework 3.0 que lleva Windows Vista.

El 15 de Febrero se presentó la jornada .net, centrándose en las ventajas en el ámbito multiplataforma que esta plataforma le ha dado a la programación de aplicaciones. Tras hacer una breve introducción a la tecnología .net se presentó la estructura y funcionamiento a través de su homónima del mundo libre, Mono. Además se demostró mediante un ejemplo funcionando sobre ambas tecnologías que las dos son compatibles en cuanto a la versión 1.1 del .net framework se refiere. Por último se presentaron las mejoras que los frameworks 3.0 y 3.5/4.0 añaden y añadirán a las tecnologías .net y una introducción a XNA y el proyecto Mono.Xna.

A partir del 19 de Febrero, en el aula de acceso libre de la Escuela Politécnica Superior, se están moviendo paralelamente dos competiciones-presentaciones con ayuda presencial por las tardes. La primera, XNA Challenge, intenta presentar las tecnologías XNA de Microsoft y acercarlas a los estudiantes. El objetivo es que se pierda el miedo a programar y experimentar con las nuevas tecnologías y utilizarlas para programar un videojuego, aunque sea sencillo. Los dos mejores proyectos tienen premio y además todos los proyectos que se hagan con estas tecnologías pueden presentarse a otras competiciones como el dream.build.play o la Imagine Cup. Esta última permite también enviar proyectos de otros muchos tipos. En el Imagine Cup Developer Center también se ayuda a desarrollar proyectos que se puedan presentar a esa competición.

El día 19 de Febrero se hizo una nueva presentación de las tecnologías XNA y el 20 de Febrero una demostración práctica de cómo se puede programar fácilmente con XNA Game Studio Express Edition un videojuego. El tutorial incluía la creación de un GameComponent sencillo, el uso de las funciones Update, Draw y la carga de contenidos con el Content Pipeline.

Las próximas charlas ampliarán el campo de uso de .net en muchos ámbitos y todavía tienes tiempo de prepararte para el XNA Challenge. Todos los días hasta el Viernes en el aula de prácticas libres de la EPS desde las 16.00 hasta las 20.00.

domingo, febrero 04, 2007

Construyendo SimpleExample (Mono.Xna)

Tras un poco de trabajo, he sido capaz de generar y ejecutar Mono.Xna y SimpleExample en Linux
Lo cierto es que, sabiendo poco de las tecnologías, que además siguen en desarrollo, me ha costado un poco generar el proyecto con Monodevelop y, finalmente, ejecutarlo con Mono en mi OpenSuse 10.2, pero finalmente lo he conseguido.

La cosa es que, en realidad, es bastante sencillo una vez comprendido todo lo que envuelve. No obstante, como me siento orgulloso de haberlo conseguido y puede que haya quien no pueda hacerlo, explicaré cómo lo he hecho.

En primer lugar, para que las aplicaciones con Mono.Xna funcionen correctamente en Mono-Linux, necesitamos todas las librerías dependientes del sistema a las que el Tao Framework hace referencia. En general son las librerías típicas de programación gráfica (OpenGL, SDL, etc.). Por supuesto, será necesario disponer de las últimas dll de Tao, actualmente en versión 2.0RC1.

Tras descargarnos el proyecto Mono.Xna o actualizarlo a su última revisión, utilizaremos el comando sh MonoDevelop.sh para que se genere la solución de Monodevelop que nos permita trabajar con el proyecto en Linux. Si lo abrimos y le damos a generar, nos aparecerán del orden de 64 errores de compilación. Eso es porque Mono.Xna está programado sobre el futuro Mono Framework 2.0, y tenemos que explicitarlo para cada uno de los proyectos que componen la solución. Con Monodevelop, hacer eso es sencillo. Simplemente tendremos que ir, proyecto a proyecto, haciendo clic secundario en el explorador de soluciones y cambiando en la ventana de opciones el "target" o "objetivo" por Mono 2.0 en lugar de 1.0. Tras haber hecho esto con todos los proyectos de la solución, la podremos generar sin problemas (aunque con un montón de warnings).

Una vez generada la solución, el siguiente paso obvio es probar si el SimpleExample funciona correctamente sobre Linux. Y lo hace, pero Mono, al contrario que .net, necesita unos pequeños archivos para cada dll utilizada (los dll.config). Si no los tenemos incluídos en el directorio del proyecto o las referencias de los mismos en la caché principal de Mono (con gacutil) el proyecto no se ejecutará. El comando mono SimpleExample.exe fallará porque nos faltarán dll aunque en realidad estén en el mismo directorio. ¿Qué hacemos?

En el paquete de la última versión del Tao Framework están todas las dll.config que necesitamos. En concreto la más necesaria para este proyecto es la Tao.SDL.dll.config, aunque no está de más añadir la Tao.OpenGL.dll.config y las otras para cada una de las dll que encontraréis en el directorio del proyecto. Estos archivos le dicen a Mono a qué librerías físicas (dependientes del sistema) hacen referencia los ensamblados dll.

Una vez añadidos estos archivos, hacer funcionar el SimpleExample es tan sencillo como abrirlo desde la consola con mono SimpleExample.exe o bien "Abrir con..." mono. La ventana de color azul clarito se presentará ante nuestros ojos iluminando las ilusiones de todos aquellos que quieren ver Mono.Xna funcionando algún día con todas las plataformas del mundo.

Unas ligeras modificaciones en el código del programa os permitirán cambiar el fondo de la pantalla, dependiendo de las teclas que estén pulsadas en ese momento. Pronto, cuando las primeras clases de Pong estén medianamente cubiertas, también podremos cargar texturas 2D en nuestros juegos y moverlas por la pantalla. Para eso falta verdaderamente poco. Estad atentos.

lunes, enero 22, 2007

Jornadas de Tecnología en la Universidad de Alicante

Desde el día 12 de Febrero, en la Escuela Politécnica Superior de la Universidad de Alicante, se celebrarán las Jornadas Tecnológicas. Los rumores (cada vez más fuertes) apuntan a una gran presencia de .Net, Mono y Xna en las mismas.

No es broma. Las noticias que me llegan y de las que también soy participante activo son que, si se consigue suficiente apoyo, las Jornadas Tecnológicas de la UA pueden ser espectaculares. En primer lugar, el .Net Club de Alicante está preparando una presentación del Lanzamiento de Microsoft Office, Windows Vista y Microsoft Exchange (jornada LOVE) en la que las novedades de tales tecnologías se presenten en sociedad al público universitario. Algo realmente interesante para cualquiera que quiera ver cómo funciona el futuro de Microsoft.

Pero las más interesantes para los subscriptores y asíduos a este blog serán las jornadas siguientes. Se preparan unas Jornadas .Net muy especiales. Tras la presentación de las novedades de la plataforma .Net en el Microsoft University Tour el pasado Diciembre, muchos nos quedamos con las ganas de charlas con mayor profundidad sobre estas tecnologías. Parece ser que van a conseguirse en estas jornadas. Además de presentar las bondades del Framework 3.0, en colaboración con el Grupo de Usuarios de Linux de Alicante (GULA) podremos ver las ventajas de tales tecnologías en uno de los campos más importantes para Ingenieros, Desarrolladores y Usuarios: la multiplataforma. Además podremos ver una presentación paralela de las bondades y el proceso de desarrollo de la plataforma .Net en Software Libre por excelencia: Mono, y algunos de los proyectos que se desarrollan sobre ambas, como uno al que le hemos dado bastante publicidad aquí: Mono.Xna.

¿Queréis más? Pues para Desarrolladores y mucho más, para Aficionados, se prevén unas competiciones de programación locales que ayuden a los competidores a prepararse para una competición a nivel nacional que todos los años patrocina Microsoft: La Imagine Cup. Para ello se prevén dos diferentes vías de competición. Por un lado una competición de programación de un videojuego con las librerías XNA y por otro una competición de programación y extensión de proyectos para enviar a la competición nacional de la Imagine Cup. ¿Quién se apunta?

viernes, enero 12, 2007

Mono.Xna avanza

El grupo de desarrollo de Mono.Xna consigue su primera meta.

Alan, propietario del grupo y uno de los administradores lo anunció ayer en su blog y en el foro del grupo de desarrollo. Mono.Xna ha conseguido su primera meta (milestone). Hasta el momento, el grupo de desarrollo tenía dos metas cercanas: 1) Conseguir hacer funcionar un ejemplo simple de juego de Xna, lo que implicaba poder llamar a las funciones más importantes de todos los objetos y 2) Implementar los métodos públicos necesarios para hacer funcionar un juego sencillo de Pong. Los métodos necesarios los encontraréis aquí, por si queréis echar algunas líneas de código.

La primera de estas metas, como digo, se consiguió ayer y hay un vídeo que lo demuestra. Sin embargo, para poder decir que se ha terminado completamente hay que crear todos los tests de NUnit necesarios para asegurar que los métodos funcionan. Más noticias próximamente.

martes, enero 09, 2007

Empieza Mono.Xna

El grupo de trabajo de Mono.Xna va cobrando forma.
Antes de la última desconexión del blog apunté que acababa de saltar la idea de portar las XNA de Microsoft, que corren sobre DirectX, a Mono, haciéndolas funcionar sobre OpenGl. Ahora, el proyecto está cobrando forma.

Tao es el nombre de la comunidad de desarrolladores que ha desarrollado enlaces (bindings) para Mono de algunas de las más importantes librerías gráficas y de audio del mundo del software libre, incluyendo OpenGL, OpenAL, o SDL entre otras. Al igual que Managed DirectX proveía una forma de utilizar las librerías DirectX desde .NET, Tao permite tanto a .NET como a Mono interactuar con estas otras librerías.

Por supuesto, Tao no incorpora las ventajas que hacen de XNA una herramienta verdaderamente interesante, como la sencillez de su uso, su completa integración en el Framework de .NET y, por encima de todo, el Content Pipeline. Por otro lado, portar las órdenes de XNA a una verdadera multiplataforma como es Mono, permitiría total compatibilidad tal cual de juegos escritos para XNA, independientemente de si se usa Windows, Linux, Mac o XBOX 360.

Enormes ventajas con un único inconveniente: tenemos que hacerlo nosotros a mano. Para eso, Tao promovió la idea, los chicos y chicas (aunque pocas) de Mono empezaron a moverse y, ahora, tenemos el proyecto empezando a dar sus primeros pasos.

En espera de sitio oficial, la página del proyecto es www.taoframework.com/Mono.Xna, aunque posiblemente encontréis mucha más información en los foros de Tao. Si queréis apuntaros al carro y desarrollar, entrad en el foro de Mono.XNA y decidlo, no os cortéis. Por supuesto, no a todo el mundo le van a dejar meter mano al código, pero todos podemos verlo y modificarlo, aunque no enviar nuestros parches. Para trastear con él podéis hace un checkout anónimo en el servidor del repositorio SVN:
URL: svn://svn.myrealbox.com/source/trunk/Mono.Xna
Access Method: SVN
Server: svn.myrealbox.com
Repository Path: /source/trunk/Mono.Xna

Además de todo esto, tenéis el grupo de desarrollo de Mono.Xna que empezó a funcionar el mes pasado. Aunque no seáis miembros del grupo podéis leer los debates del mismo, y podéis solicitar ser miembros si queréis participar.

Aunque no sepáis mucho de programación gráfica o del uso de las librerías gráficas y de audio, podéis ayudar al proyecto. Gran parte del trabajo que queda por hacer, que es mucho, es la implementación de una cantidad enorme de clases que proveen soporte matemático a las clases gráficas y de juego. BoundingBox, BoundingFrustum y BoundingSphere entre otras clases están prácticamente vacías en espera de alguien que se caliente la cabeza con ellas, y conseguir que funcionen no es tan difícil. Además, mientras tanto podéis aprender un montón.

Versión 1.0

Revisión de XNA Framework 1.0 y XNA GSEE
Desde que se anunció la salida de la primera Beta de XNA a finales del año pasado, la forma en que se han sucedido los acontecimientos ha sido vertiginosa. En primer lugar, en menos de tres meses ya tenemos versión definitiva del XNA Framework con el Game Studio Express Edition funcionando.

Esta versión del Game Studio incorpora finalmente el Content Pipeline que facilita enormemente la incorporación de elementos de diseño en nuestro videojuego. Además el propio Framework es el motor del juego, aunque, por supuesto, hay motores adicionales mucho más sofisticados ya funcionando por ahí.

Una de las cosas que, sin embargo se han caído por el camino ha sido la posibilidad de utilizar controles mediante Drag-and-Drop. En la primera Beta, la generación de estos controles solía dar algunos problemas, y por lo visto los chicos y chicas del grupo de desarrollo han preferido dejarlo para más adelante.

Hay que recordar que esta versión es totalmente gratuita y que todos los juegos desarrollados con ella pueden distribuirse libremente. Para XBOX360, sin embargo, necesitamos adquirir una licencia de dsitribución aparte. Pronto tendremos el XNA GS para las versiones adultas de Visual Studio, pero de momento, podemos trastear (y muy a gusto) con la versión Express.