Archivo de la categoría: Programación

Entradas relacionadas con la programación, especialmente centradas en desarrollo de videojuegos.

Como instalar XNA 4.0 en Visual Studio 2013 sin instalar Visual Studio 2010 o Windows Phone SDK 7.1

dotnet_xna_monogame

Llevaba un tiempo tocando MonoGame por encima para trastear y hacer pequeñas pruebas, ya que XNA me sigue pareciendo una herramienta, junto C# y .NET, muy potente a día de hoy para desarrollar, y sobre todo en juegos. El único inconveniente que le veo todavía a MonoGame es la necesidad forzosa de necesitar de XNA para poder realizar la compilación de assets, y que dicha tarea solo sea posible desde Windows, lo cual mata en parte la idea de usar MonoGame para desarrollar desde Linux o Mac, ademas de lo incomodo que es tener un proyecto a parte para tener que ir compilando los assets y pasarlos después al proyecto de MonoGame.

Otro problema que me encontré con MonoGame en Windows fue que en Windows XP, por un lado, el driver de audio, OpenAL, no se instalaba correctamente (se soluciona haciendo la instalación manual) y que las llamadas a OpenGL fallaban (problemas con la versión de OpenGL de Windows XP creo recordar). En Windows 8.1 las llamadas a OpenGL funcionaban sin problema, el proyecto renderizaba gráficos, pero el audio, sin dar error alguno, no funcionaba. Por este motivo me pareció más lógico dejarme de experimentos raros y tirar a por lo seguro sobre Windows, usar XNA, como solución nativa junto con DirectX, y así de paso matar dos pájaros de un tiro: el framework para desarrollar el código multiplataforma desde Windows (para luego portarlo a MonoGame) y la compilación de assets.

Pero con XNA había un pequeño problema y era el de no poder instalar XNA en versiones de Visual Studio que no fueran la 2010. Actualmente trabajo en Windows 7 y Windows 8.1 desde Visual Studio 2013, y aunque existen formas para lograr que nuevas versiones de Visual Studio puedan cargar y gestionar proyectos de XNA 4.0 bien es cierto que esto obliga a instalar, si o si, o Visual Studio 2010 o el Windows Phone SDK 7.1, que también incluye Visual Studio 2010. A mi sinceramente, no me apetece tener dos Visual Studios instalados, con toda su parafernalia que instala debajo, ocupando mucho espacio en el disco duro, solo para poder usar un framework como XNA, así que me puse a investigar y he logrado encontrar una manera viable de poder instalar manualmente XNA 4.0 para funcionar en Visual Studio 2013 sin tener que instalar antes Visual Studio 2010 o el Windows Phone SDK 7.1.

Seguir leyendo Como instalar XNA 4.0 en Visual Studio 2013 sin instalar Visual Studio 2010 o Windows Phone SDK 7.1

Como configurar correctamente el icono a la ventana e instancia de nuestro proyecto de MonoGame en Windows

Trabajando en MonoGame sobre Windows nos encontramos con que el proyecto que se genera con la plantilla de proyecto que ofrecen para Visual Studio es un proyecto de Aplicación de consola en vez de Aplicación para Windows. Esto es por que MonoGame genera la ventana del programa mediante el framework de OpenTK (Open Tool Kit Library) generando así una ventana externa, esto es similar a lo que hace XNA mediante la API de Windows. El problema que esto conlleva es que al ejecutar el juego nos aparecerá la ventana de consola, que MonoGame utiliza como salida de depuración, y la ventana del juego. El problema es que icono del proyecto se aplica a la ventana propia de la aplicación, la consola de texto, y no a la ventana del juego, la que genera OpenTK.

Seguir leyendo Como configurar correctamente el icono a la ventana e instancia de nuestro proyecto de MonoGame en Windows

Sencillo motor de colisiones 2D para XNA/MonoGame

Una de las cosas que siempre se me han resistido a la hora de intentar hacer un juego plataformas 2D, y como a mi a mucha más gente, es el implementar correctamente las colisiones y su respuesta (el detectar paredes o suelos y saber ubicar correctamente el objeto cuando colisiona con el entorno).

Cierto es que hoy día existen muchas alternativas para evitar programarte un sistema de colisiones y respuesta para un juego de plataformas. Existen varios motores de físicas 2D para múltiples plataformas y lenguajes, Box2D por ejemplo, que lo implementan varias herramientas de desarrollo de juegos como Stencyl y que es muy popular en juegos Flash, o Farseer Physics Engine para XNA, que se ha usado en varios proyectos de XBox360 y Windows Phone y que están portando a MonoGame. El problema, al menos con Farseer Physics Engine que es al que le dedique tiempo en su momento, es que me resulto extremadamente complejo de implementar y configurar todos los parámetros y propiedades que tiene así como lograr ajustar la escala de medida del sistema de físicas con la escala en pixeles en pantalla para poder dibujar un sprite acorde con su representación física. En definitiva, una API muy poco amigable para la mayoría de la gente.

Seguir leyendo Sencillo motor de colisiones 2D para XNA/MonoGame

Serialización de datos en .NET: como exportar e importar datos de nuestro juego en archivos fácilmente

No hace mucho un compañero de los foros de Stratos-AD venia preguntando como podría implementar un sistema para guardar partidas de su juego en XNA y después volver a cargarlas, no en si el como el organizar los datos e información del juego y como gestionarlo en un archivo si no en si como podría exportar e importar fácilmente información a un archivo en disco. Esto me recordó que yo en su día, cuando empece a programar en .NET, me encontré con el mismo problema y que esto es una duda que a muchos nos surge.

En Visual Basic 6.0, donde estuve muchos años programando, esto era relativamente fácil ya que mediante las funciones integradas para gestionar la escritura y lectura de archivos en formato binario era tan fácil como pasar la propia variable de estructura de datos como parámetro a escribir o leer, Visual Basic 6.0 se encargaba de volcar en formato binario el contenido integro de la variable y despues permitía volver a crear la variable con el mismo contenido. Supongo que en C/C++ sera igual de directo, sin embargo en .NET ya no era tan fácil, no al menos de la misma forma. Aquí no podías llamar a las funciones de System.IO y decirle que te volcara la variable directamente en un archivo. Sin embargo si que existe una manera sencilla de hacer esto, mediante la serialización a XML.

Resumiendo mucho, la serialización a XML es un mecanismo que permite convertir una estructura de datos en una estructura de texto en formato XML. Este mecanismo esta presente en varias tecnologías de programación como .NET o Java. Yo voy a explicar mi ejemplo en .NET mediante C#.

Seguir leyendo Serialización de datos en .NET: como exportar e importar datos de nuestro juego en archivos fácilmente

dx_lib32 se convierte en proyecto de código abierto

Después de casi 10 años de trabajo y varias versiones publicadas desde 2004 hasta finales de 2009, con una pequeña pero modesta comunidad de usuarios detrás, el Proyecto dx_lib32 finalmente pasa a ser de código abierto bajo licencia LGPL para todo aquel que este interesado en conocer las tripas de uno de mis proyectos más importantes o bien quiera seguir continuando su desarrollo o migrarlo a otros lenguajes y plataformas.

La ultima versión desarrollada, que no se publico en la web del proyecto, la versión 2.2.1, esta disponible junto al código de los ejemplos, tanto de Visual Basic 6.0 como Visual Basic .NET, los fuentes en HTML de la documentación para generar el archivo CHM de Windows, las dependencias necesarias, tanto el runtime de Visual Basic 6.0, el ActiveX de DirectX8 como los codecs OGG Vorbis.

Toda la información sobre el Proyecto dx_lib32 la podéis encontrar en su sección dentro del portfolio de proyectos.

Bon profit ;)