Mono.Xna

¿Qué es Mono.Xna?

Mono.Xna es el nombre provisional de un proyecto que nació poco después del lanzamiento de la primera Beta de XNA (de Microsoft) a finales de 2006, cuyo objetivo es crear un conjunto de librerías totalmente compatibles con el XNA Framework de Microsoft, pero de manera que funcionen en entornos de software libre sobre Mono. Este conjunto de librerías son en cñodigo abierto y utilizan soluciones de software libre para su implementación, de manera que los juegos programados para XNA sean jugables en cualquier plataforma, sea sobre XNA o Mono.Xna.

¿Cómo funciona Mono.Xna?

Mientras que XNA utiliza DirectX para realizar su trabajo gráfico, Mono.Xna utiliza librerías de software libre para realizar las mismas acciones. En concreto utiliza un framework similar al antiguo Managed DirectX, pero sobre las librerías SDL, OpenGL y otras. Al contrario que DirectX, estas librerías se encuentran disponibles para múltiples plataformas, incluyendo no sólo Windows, sino muchas distribuciones de Linux, BSD, Solaris, MacOS, etc.

Mono.Xna, utiliza la misma estructura de clases que XNA, aunque su implementación se ha realizado enteramente con software libre, sin mirar a una sola línea de código de la implementación de Microsoft. Sin embargo, se tiene mucho cuidado en comprobar que ambas librerías produzcan los mismos resultados en las mismas situaciones. Esto permite que cualquier juego programado con XNA pueda funcionar exactamente igual sobre Mono.Xna, extendiendo las posibilidades multiplataforma de este Framework.

¿Para qué sirve Mono.Xna?

La idea principal que llevó al inicio de desarrollo de Mono.Xna fue conseguir un Framework compatible con el XNA de Microsoft, de manera que los juegos implementados en una u otra plataforma fueran completamente compatibles entre sí y pudieran ejecutarse, sin volver a compilar una sola línea de código, en cualquier plataforma que contara con bien .Net y XNA o bien Mono y Mono.Xna.

En segundo lugar, aunque también muy importante, otro objetivo de Mono.Xna es proveer a los desarrolladores de software libre de una librería para la programación de juegos multiplataforma estable y sencilla de utilizar.

¿En qué se parecen Mono.Xna y el XNA Framework de Microsoft?

Ambos Frameworks ofrecen a los programadores de videojuegos las mismas funcionalidades, las mismas clases, los mismos métodos… Ambas librerías se estructuran de la misma manera y ambas generan los mismos resultados en las mismas situaciones. Las dos librerías están orientadas a la programación con tecnologías .Net, aunque Mono.Xna se puede usar, junto con Mono, en más plataformas. Además, ambas tecnologías dependen de librerías gráficas que dependen del sistema, XNA de DirectX y Mono.Xna de SDL y OpenGL entre otras. Por último, el objetivo de ambas es promover los juegos multiplataforma. En el caso de XNA la multiplataforma se limita a entornos Windows y XBox 360 con limitaciones y en el caso de Mono.Xna a cualquier sistema operativo donde pueda funcionar Mono o el .Net Framework.

¿En qué se diferencian Mono.Xna y el XNA Framework de Microsoft?

Esencialmente, Mono.Xna y XNA se diferencian en que en su implementación hacen uso de librerías completamente diferentes. Mientras XNA utiliza DirectX, Mono.Xna utiliza librerías estándar que están disponibles en muchas plataformas diferentes, como SDL y OpenGL entre otras. De este modo, mientras que XNA puede funcionar sólamente en Windows y XBox 360, Mono.Xna puede funcionar prácticamente en cualquier sistema operativo, incluyendo Windows.

Dado que XBox 360 utiliza un Compact Framework de XNA, los juegos programados con Mono.Xna sólo podrán funcionar en XBox 360 si hacen uso únicamente de ese Framework reducido.

¿Quién hace Mono.Xna?

Mono.Xna es un proyecto de la comunidad. Depende del Tao Framework, que provee de un envoltorio manejado a las librerías gráficas que Mono.Xna utiliza por debajo, por lo cual está muy relacionada con ese proyecto. También depende de Mono, puesto que uno de los primeros objetivos de Mono.Xna es hacer funcionar juegos XNA sobre Mono. No obstante, al igual que estos dos proyectos son abiertos, Mono.Xna también lo es. El desarrollo de Mono.Xna es, por tanto, fruto del esfuerzo de mucha gente, no de ninguna empresa específica, aunque en determinados momentos alguna empresa pueda decidir aportar sus conocimientos. Pero aún en ese caso, Mono.Xna seguirá siendo un proyecto libre de la comunidad, sin ser propiedad de ninguna empresa.

¿Cómo puedo apuntarme a Mono.Xna?

Primero, debes tener claro que cualquier persona puede aportar su esfuerzo al proyecto, incluso si estás aprendiendo, no importa. Para hacerlo sigue estas instrucciones:

1. Instala el XNA Framework de Microsoft en tu máquina Windows y empieza a experimentar con él. No hace falta que seas un experto, pero prueba a estudiar un poco la estructura de XNA y su funcionamiento. Puedes usar los GameComponents disponibles en XNACommunity para hacerte una idea de cómo funciona XNA a grandes rasgos. También puedes contactar con nosotros en el foro para empezar a entender XNA, o investigar un poco en msdn. No hace falta que seas un experto, sólo que tengas unas nociones básicas (muy, muy básicas) de cómo funciona XNA.

2. Entra en el grupo de discusión del proyecto Mono.Xna y apúntate. Haz clic en el vínculo “Formar parte de este grupo” a la derecha y conéctate con tu cuenta de Google. Si no tienes una puedes crear una. Pronto te aceptarán en el grupo.

3. Descárgate el código fuente del proyecto desde el svn del proyecto. Si nunca has utilizado svn y utilizas Windows, tal vez te resulte más fácil usar una aplicación llamada TortoiseSVN, que no es más que un cliente SVN que se integra con el menú contextual del explorador de Windows. Una vez te hayas descargado el código fuente en tu copia de trabajo, utiliza uno de los scripts que vienen junto con el código fuente para generar el proyecto en el editor que utilices normalmente. Hay scripts para Visual Studio 2005 (Professional y Express), SharpDevelop, Monodevelop, etc. Una vez tengas la solución generada, ábrela y échale un vistazo al código.

4. Antes de empezar a programar, léete los siguientes threads del grupo de desarrollo: “Writing NUnit tests“, “Contributing Guidelines” y “Coding Style Guidelines.” Te ayudará a saber cómo programar y que tu código sea aceptado y te dará unas nociones de estilo de programación que hacen que el código sea legible. Recuerda que incluso aunque sea un proyecto libre y abierto, algo de organización es necesaria para conseguir un objetivo.

5. Es muy importante que hagas pruebas sobre el código que escribas tanto contra XNA como contra tu propio código, para asegurarte de que el resultado con ambas librerías es el mismo. Para eso, instala NUnit en tu ordenador. Si no sabes cómo escribir tests para NUnit, no te preocupes. Échale un vistazo a los tests que ya están implementados en el código que te has descargado y al thread “Writing NUnit tests” y no dudes en preguntar.

6. Empieza a usar la cabeza y tus dedos para codificar alguna función que esté todavía vacía. La gran mayoría de las clases tienen un montón de throw new NotImplementedException(). Eso quiere decir que esa función necesita que alguien la implemente. La página Acion Plan del grupo de discusión contiene a grandes rasgos quién está trabajando en qué en cada momento. Trata de no empezar a trabajar en algo que ya esté siendo implementado por otra persona.

7. Mantén tu copia de trabajo siempre actualizada con updates contra el SVN.

8. Cuando tengas algo que enviar, recuerda que ningún parche se acepta si no lleva NUnit tests añadidos. Para enviar un parche, utiliza el tracker del proyecto. Genera un “New Issue” e incluye tu parche.

9. Para resolver tus dudas, pregúntalas en el grupo de discusión o bien en el canal de IRC #mono.xna del servidor irc.gimp.org. Hay numerosos clientes de IRC, por ejemplo XChat, aunque también puedes conectarte por tu navegador con un CGI como este. Recuerda rellenar tu nombre de usuario, el servidor irc.gimp.org y el canal #mono.xna.

Deja un comentario