Dentro del abecedario de intenciones de diciembre, había alguna letra relativa a programación para el iPhone. El desarrollo para terminales móviles es cada vez más demandado. Pero que algo se demande nunca me ha empujado a seguirlo. Tiene que llamarme la atención. Y aquí es dónde debería decir que en los dos últimos años, con la aparición de dispositivos herederos del iPhone, además del propio iPhone, sin dejar de lado el iPad, la programación para terminales móviles se ha convertido en algo que me llama poderosamente la atención. Llevo tiempo queriendo hacer algo para iPhone y presentarlo en la App Store. Tan solo por el placer de hacerlo e intentarlo. Aunque también para ver si doy el pelotazo y me dedico a vivir con Curro en el Caribe. Y tal vez esta última intención ha eclipsado lo anterior y no me he puesto a ello antes. Se me ocurren cientos de ideas a lo largo del día, pero casi todas las voy descartando por parecerme, después de darle unas vueltas, que el esfuerzo no compensa o que ya hay cientos de cosas similares. Así que un día sí y otro también lo voy dejando aparcado en favor de cosas que, para ser franco, tal vez me atraigan menos. Hasta que al final me he dicho que lo interesante en sí no ha de ser el resultado —tal vez los restos incoscientes de la herencia defectuosa de haber trabajado los últimos tres años en una empresa de estricto y cuasidictatorial régimen orientado a resultados, aunque no siempre la calidad con que se consiguen sea la más adecuada—, sino disfrutar en el proceso —la idea original— y, para mí lo más importante siempre, aprender durante el camino. Así que, ni corto ni perezoso, hace unas semanas me levanté a las cuatro y media de la mañana y me senté delante del ordenador a buscar información.
En octubre del año pasado, a poco de haberme comunicado la dirección que tan pronto desmantelase la oficina engrosaría las listas del paro, tuve otro de esos momentos de ponerme a programar un videojuego [1]. Lo de crear un juego es una constante en mi vida. Desde que tengo uso de razón y tuve mi primera videoconsola conectada al televisor. Curiosamente, salvo por alguna cosilla en BASIC para el Spectrum-48-k-teclado-de-goma, de los que me encantaría recuperar las fuentes, y de el Super Kutre Invaders [2], nunca me lo he tomado muy en serio. Hasta ahora. ¿Si lo que me apetece es programar algo para el iPhone, y siempre he querido hacer un juego, porqué no hacer un juego para el iPhone? Totalmente de perogrullo.
A poco que uno se ponga a mirar en Internet los SDK's, API's y entornos de desarrollo para juegos que hay, le puede sobrevenir un colapso mental. De hecho eso es lo que casi me da a mí. Tras cuatro o cinco días intentando elegir qué sería mejor para llevar a cabo alguna de las varias ideas que había estado apuntando en las semanas anteriores, me di cuenta que estaba bloqueado en un claro caso de parálisis por análisis [@ Wikipedia]. Casi desde la mañana hasta la noche encontrando alternativas y revolcándome en el fango de Internet rebuscando información y opiniones sobre cada caso. Y, sobre todo, precios. Agotador.
A continuación un mini-mapa mental de lo que fui encontrando [3]:
Si me hubiese dedicado a investigar y probar cada caso, a estas alturas aún seguiría rompiéndome los cuernos contra la mesa de trabajo. Y estoy seguro que aún hay más por ahí que sería muy interesante. Así que fui tomando decisiones para podar el árbol. Tal vez erróneamente, pero después de mi (¿nula?) experiencia con Unity, opté por dejar en segundo plano los entornos integrados y dedicarme a las API's y SDK's basadas en lenguajes de programación. En última instancia mi intención no es meterme en nada 3D de momento, por lo que buscaba algo que me resultase cómodo para hacer un juego en 2D. Lo que vulgarmente vendría a ser un Indie Game.
Después de muchos quebraderos de cabeza me quedé con cuatro opciones para ir mirando en primera instancia y hacer pruebas de concepto:
- Cocos2D (Objective-C)
- Sparrow (Objective-C)
- MonoGame / ExEn (C# --> MonoTouch)
- Corona SDK (LUA)
Leyendo la documentación, opiniones, ejemplos y estado de desarrollo, los que me llamaron más la atención fueron Sparrow y Corona SDK, basado en el lenguaje de programación LUA. De hecho, a este último le tengo muchas ganas y encabeza la lista como «muy probable». Sin embargo, dada mi familiaridad con .NET y viendo la bastísima cantidad de documentación existente sobre XNA, he optado por empezar las pruebas de concepto con MonoGame (XNATouch) y, por tanto, con MonoTouch. Después intentaré hacer algo con Cocos2D y Sparrow y, en última instancia, me lanzaré con Corona SDK y el bastante sencillo lenguaje de programación LUA.
Podría resultar curioso que no empiece directamente con los que requieren Objective-C que, además, económicamente son los que menos inversión exigen para poner algo en la App Store. Únicamente se requiere la licencia de desarrollador para iOS; algo que el resto de opciones también requieren y que, además, exigen pago de otras licencias. Llevo un tiempo programando en este lenguaje y —estoy seguro que esto sonará casi blasfemo a los apóstoles del mismo— es que cada vez me gusta menos. Por mucho que me intenten vender su sintaxis revolucionaria, rompedora y todo lo que tú quieras, cada vez me parece más una amalgama de intenciones y modernizaciones a medias. De hecho no descarto saltar a C++. Pero, como todo, es una opinión y habrá quien me corrija en mis palabras. Pero como es mi opinión, y en ella baso mis decisiones, he optado empezar por MonoTouch y usar alguna de las dos alternativas para desarrollar con XNA; sabiendo además que este mismo SDK se usa para desarrollar en PC, XBOX 360 y Windows Phone 7, que con la decisión de Nokia [4] de basar todos sus futuros dispositivos en este sistema operativo, da un buen espaldarazo al parque de móviles que podrían ejecutar el mismo código. Sin olviar que tanto MonoGame como ExEn tiene los ojos puesos en Mono for Android, lo que, en un universo idílico, daría lugar a que lo programas una vez y se podría ejecutar en virtualmente —y vender a— casi todos los dispositivos móviles que hubiera en un futuro no muy lejano.
Hacer un juego es una de las cosas más difíciles que se me ocurre en las que se podría embarcar uno. No tanto por la programación que, además de tener que lidiar con circunstancias particulares (concurrencia, eventos, tiempo real, animaciones, particularidades del hardware, etc., etc), no deja de ser código y, por tanto, aprendible en un tiempo prudencialmente breve para alguien que ya tiene suficiente bagaje. Para mí lo peor de hacer un juego —y uno de los motivos por los que no me haya lanzado antes— está en la componente gráfica. Soy nulísimo en el dibujo y un juego, al menos de forma más o menos generalizada, necesita una muy buena presentación. Por ello, de cara a las pruebas de concepto, me puse a buscar alternativas que no me exigiesen dibujar, al menos no demasiado. Pero eso, mejor, ya lo cuento mañana.
Sin olvidar, entre tanto, que el abecedario de las intenciones tiene más letras y que, visto que es imprescindible el Inglés, he de retomar su estudio lo antes posible. A ver si en unos meses puedo optar a puestos en EEUU (JobCraver). ¿Alguien tiene curiosidad por ver los rangos salariales que se ofrecen al otro lado del Atlántico? Ahora busquen en InfoJobs algún puesto equivalente y, si hay suerte, lo que ofrecen.
[1] La entrada en cuestión es 'Pues sí que está siendo un año de juegos, y algo más (y 2)'. Entonces andaba toqueteando nuevamente Unity 3D (http://unity3d.com/), pero acabé dejándolo (de nuevo) porque el diseño 3D es bastante complicado. Se tarda muchísimo en conseguir una animación interesante. De hecho yo no lo conseguí. Y eso resulta frustrante. Si ya soy rematadamente malo dibujando en 2D, no se pueden ni imaginar en 3D.
[2] En la entrada 'Tesoros perdidos reencontrados (II)' hay un vídeo del Super Kutre Invaders. Por cierto, he vuelto a perder de vista el código fuente. Suerte que se lo pasé a Moisés antes.
[3] A ver si no me equivoco o me dejo alguno fuera.
- Ooling Engine: http://code.google.com/p/oolongengine/
- OpenGL ES: http://www.khronos.org/opengles/
- Airplay SDK: http://www.airplaysdk.com/
- cocos2d for iPhone: http://www.cocos2d-iphone.org/
- Sparrow: http://www.sparrow-framework.org/
- SDL: http://www.galaxygameworks.com/
- OpenTK, OpenGL para .NET: http://www.opentk.com/
- MonoGame (antes XNATouch): http://monogame.codeplex.com/
- ExEn: fork de XNATouch y SilverSprite (http://silversprite.codeplex.com/) que actualmente se encuentra en fase de desarrollo privado tras un período de monetización en RocketHub (http://rockethub.com/projects/752-exen-xna-for-iphone-android-and-silverlight)
- CocosNet, parece no tener demasiado desarrollo en los últimos meses: https://github.com/city41/CocosNet
- Corona SDK: http://www.anscamobile.com/corona/
- ImpactJS: http://impactjs.com/
- Unity 3D / Unity iOS: http://unity3d.com/
- iTorque 2D: http://www.garagegames.com/
- Unreal Development Kit: http://www.udk.com/
- Game Editor: http://game-editor.com/Main_Page
- GameSalad: http://gamesalad.com/
- Delta Engine, aún en desarrollo: http://deltaengine.net
No hay comentarios:
Publicar un comentario