lunes, 28 de marzo de 2011

Profanation y SilverSprite

Me daba un poquito de pena dejar la cosa como estaba. Así que, antes de meterme con otro tema, me puse a juguetear con SilverSprite. Para el que no lo sepa —y le interese, claro— SilverSprite es una capa de adaptación que facilita ejecutar código XNA, en teoría con apenas cambios en el código, en Silverlight [@ Wikipedia] que a su vez es, para quien no lo sepa —y también esté interesado—, un framework pensado originalmente para desarrollar aplicaciones multimedia embebidas en páginas Web, a grosso modo. Viene a ser la respuesta de Microsoft a la plataforma Flash de Adobe y al malogradísio JavaFX de Sun/Oracle. A día de hoy, a la espera de su quinta revisión que incluye aceleración 3D y muchas cosas más, es otra filigrana tecnológica que permite también ejecutar aplicaciones en el escritorio, directamente. Sin entrar si es mejor o peor que las otras alternativas, ni tampoco si se usa más o menos en la actualidad para hacer cosas interesantes, o de que ya está HTML 5 para todo esto, lo cierto es que al ser (casi) multipltaforma [1] el que tengamos la posibilidad de ejecutar las aplicaciones hechas en XNA en la Web a modo de demostración de lo que se puede esperar en otras plataformas es algo que a mí, sinceramente, me parece cojonudo. Si cuajan MonoGame y/o ExEn, significaría que el mismo código sería ejecutable en dispositivos que van desde el iPhone hasta Xbox 360, pasando por Android, el Mac, el PC y el Windows Phone 7. Para empezar, no está nada mal. Por supuesto, en todo momento estamos hablando de juegos 2D, ya que toda la parte de 3D sigue estando en el aire en cualquiera de las alternativas existentes a día de hoy. ExEn es el que parece, dentro de su desarrollo actualmente privado, que dedicará más esfuerzo en breve a implementar parte de las API 3D de XNA 4. Ya veremos.

En mi caso el trabajo lo tuve que realizar en la máquina virtual Windows de que dispongo. Con MonoDevelop tuve muchos problemas para compilar el código Silverlight usando Moonlight SDK. Pero una vez decidido a ponerlo en marcha, y optar por hacerlo con Visual Studio, la cosa fue más o menos sencilla [2]. El esquema general a seguir es el que se encuentra en la página del proyecto SilverSprite. A partir de ahí se exigen algunos cambios menores. En mi caso, del código escrito directamente sobre MonoGame, tuve que cambiar la parte de detección de los toques en la pantalla, que directamente no existen en el API de SilverSprite, y que ahora se controlan con el ratón. También tuve que cambiar la llamada al método Begin que se realiza sobre la instancia SpriteBatch asociada a la clase del juego, ya que se exigen más parámetros. También tuve que convertir todos los sonidos a MP3 y, aprovechando, les bajé la calidad para que la descarga desde Internet no supusiera un trauma. A nivel de invocación del API de sonido también hay algunos cambios menores, pero nada significativo. Quitando el pequeño problemilla con el archivo XAML mencionado en la anotación al pie de artículo, calculo que todo el proceso me llevaría cosa de una hora, aproximadamente. A partir de ahí lo estuve probando en diferentes navegadores. En el que peor resultados obtuve fue
con Safari. El movimiento no terminaba de ser bueno, haciendo cosas raras después de cada salto. En el resto, Chrome, Firefox, Opera e Internet Explorer (en la máquina virtual), la reproducción era exactamente igual a como funciona en el simulador de iPhone.


En fin, una alternativa interesante; o una curiosidad inútil más. Ya veremos.

Al que quiera perder unos minutos con mi prueba de concepto, la podrá encontrar aquí. Si da la casualidad de que alguien tiene la última versión de Moonlight funcionando en su equipo Linux y quiere probar, que me diga qué tal le va.


[1] Ya es de sobra conocido el desprecio que siente Microsoft por la plataforma Linux. Pero también es conocido que ahí donde uno no quiere perder su tiempo, aparece gente dispuesta a ello. Para el mundo Linux existe Moonlight, proyecto auspiciado por el marco del proyecto Mono. Para todo aquel que esté interesado en probar lo de hoy en una máquina con Linux.
[2] La cosa incluso hubiese sido más sencilla si no me hubiese equivocado en una letra a la hora de referir el espacio de nombres en el que se encontraban las clases del juego. En el archivo XAML de la aplicación, ahí donde dice que se ponga «clr-namespace:» yo puse «cls-» y estuve como cosa de una hora intentando averiguar porqué demonios aquello no funcionaba ni a tiros.

No hay comentarios: