De iPhone a AppUp: Migración de "Smiles"

Con el crecimiento y la popularidad del desarrollo de aplicaciones de iPhone, muchos de estos desarrolladores consideran cómo ampliar su mercado a otras plataformas. Algunos de ellos han logrado éxito en la migración a AppUp y han descubierto algunos desafíos y oportunidades interesantes entre las plataformas.


A continuación presento mi entrevista con el desarrollador Mike Kasprzak, Director Ejecutivo de Syhkronics, acerca de su experiencia en la migración de su juego galardonado "Smiles" de iPhone a AppUp.


 


P. ¿Qué herramientas y método utilizó para realizar la migración de la aplicación a netbook, y por qué siguió ese camino?

Mike Kasprzak:

Primeramente, usé OpenGL para los gráficos. Prácticamente, toda plataforma que valga la pena tiene una versión de OpenGL disponible (o una API equivalente). En Mac, Linux y la mayoría de los portátiles, es la API única de gráficos tridimensionales. En Windows, es un accesorio, pero siempre está ahí. En realidad, OpenGL es una API mucho más antigua que DirectX, pero es un diseño robusto y sólido que sigue siendo relevante casi 20 años después.

Escribí el juego en C++, que también es bastante bueno para soportar el paso del tiempo. Oculté las funciones específicas para iPhone que requieren código Objective-C tras funciones y variables tipo C, de modo que para migrar a PC, simplemente tuve que reescribir estas funciones.

Estructuro el proyecto manualmente para poder mezclar y hacer coincidir proyectos Xcode, proyectos Visual Studio y archivos de construcción juntos en un diseño común. Hacer esto correctamente requiere de cierta planeación y trabajo, pero es mucho mejor que copiar archivos manualmente. Mi archivo de construcción es personalizado y detecta automáticamente todos los archivos en el proyecto. Pero tanto para Xcode como para Visual Studio, creo manualmente un proyecto arrastrando todos mis archivos de origen con el ratón (directorios a la vez).

Mantengo mis archivos sincronizados con Subversion (SVN), que también es excelente para copias de seguridad. En específico, uso TortoiseSVN en Windows y SCPlugin en la Mac. Ambos se integran directamente en el Explorador de archivos o el Buscador, lo que hace que sean muy fáciles de usar.

En la PC, utilicé SDL como API host en vez de escribir código nativo de API de Windows. En el iPhone, escribí código nativo, pero las PC son totalmente en SDL. Esto tiene el beneficio adicional de funcionar en Windows, Linux y Mac, además de en algunos dispositivos portátiles equipados con Linux (Nokia, Palm).

Pero aun cuando usé varias bibliotecas estándares, escribí mi propia biblioteca envolvente sobre OpenGL y SDL. Posteriormente, esto me permitirá hacer que el juego migre más allá de los admitidos arriba, a DirectX en Windows, a la plataforma OpenKode de Khronos (la alternativa del grupo OpenGL para SDL), o a las API nativas de las consolas de juegos como PlayStation.

Finalmente, el código del juego en sí es como un módulo que descansa sobre el código de la plataforma específica. Tiene una función Initialization, una función Step y una función Draw. El código del juego no considera la forma ni el tamaño de la pantalla, simplemente traza con lo que tiene a su disposición. Cada cuadro del juego es una ejecución de "Step" y luego "Draw", pero si el juego comenzara a ejecutarse con demasiada lentitud, "Step" puede ejecutarse unas cuantas veces para ponerse al día.



P. ¿Cómo afrontó las diferencias de hardware como, la resolución de pantalla, multitáctil vs. ratón y teclado, y el acelerómetro en el iPhone?

Mike Kasprzak:

En cuanto a resoluciones de pantalla, hice unas cuantas cosas.

Lo primero fue que diseñé el juego y la interfaz de usuario para que fueran escalables. Esto significa que no se basan en coordenadas de píxeles para colocar objetos en la pantalla. Esto quizá suene un poco complicado, pero el truco es tomar una resolución de referencia y multiplicarla hasta llegar a la resolución real. De este modo, si la resolución de referencia es 480x270, puede multiplicarla por 4 para alcanzar 1920x1080 (es decir, alta definición de 1080p).

Lo que tal vez no sea claro es que este método de multiplicación se realiza totalmente con hardware de gráficos tridimensionales y textura. El juego Smiles es un juego de dos dimensiones, pero utiliza el hardware de gráficos tridimensionales del dispositivo en el que se encuentre. Sencillamente, no se usa la coordenada "Z" y se ignoran funciones como las pruebas de profundidad. El trabajo con el hardware 3D involucra un poco más de operaciones matemáticas, pero en la actualidad todo tiene 3D acelerado. Si no lo está usando, simplemente está desperdiciando su rendimiento.

A continuación, me aseguré de crear todas las imágenes del juego con una resolución muy alta. Aun cuando al principio mi objetivo era la pequeña pantalla del iPhone (480x320), mis imágenes originales tenían una alta resolución que era suficiente para alta definición de 1080p (1920x1080). En realidad, algo que es genial en esto son las matemáticas. Puede crear imágenes con tamaños aptos para teléfonos inteligentes (iPhone de 480x320 y otros), luego duplicar eso para la alta definición de 720p (equipos netbook, tablet, slate y teléfonos con mayor densidad de píxeles) y duplicarlo nuevamente para llegar a alta definición de 1080p (PS3, Xbox 360 y PC potentes para juegos). En la práctica, esto significa comenzar desde arriba con las imágenes para 1080p, después reducir el tamaño a la mitad para las pantallas de 720p y luego reducir nuevamente el tamaño a la mitad para las pantallas de baja resolución de los teléfonos inteligentes. Este método de reducción por mitad también puede automatizarse fácilmente.

De modo que, en lo que respecta a las imágenes y la interfaz de usuario diseñadas para cambiar de tamaño, lo principal es la relación de aspecto. Lo mencionado con respecto a la resolución de referencia se encarga de acomodar las relaciones de aspecto. Todo lo que necesita hacer es elegir o calcular una escala que en realidad haga que quepa en la pantalla. Sin embargo, esto puede dejar algo de espacio sin utilizar en los lados o debajo. En vez de usar barras negras en Smiles, lo resolví de dos maneras distintas. La primera fue crear un fondo capaz de admitir mosaicos y la segunda fue crear un fondo realmente grande.

Los efectos para mosaicos son fáciles y cambian bien de tamaño. Simplemente agregue otra fila o dos de mosaicos para llenar el espacio adicional.

Para los fondos grandes, la idea es crear algo más grande que la pantalla. Por lo general, el doble de ancho y el doble de alto para la pantalla de referencia es suficiente. El fondo en sí deberá ser algo que no contenga nada que sea visualmente importante, pero si el usuario puede verlo, no parecerá que esté fuera de lugar.

En cuanto a la función multitáctil, en realidad no fue un problema para mí en absoluto. En general, la función multitáctil se utiliza principalmente para trazos táctiles. El zoom con los dedos, el giro con dos dedos y demás. A pesar de todas esas cosas elegantes, lo que se hace con más frecuencia con una pantalla táctil es tocarla.

Sin embargo, lo que sí requirió de cierto trabajo de diseño fueron las diferencias entre el ratón y la pantalla táctil. Al comparar los dos, ambos le dan posiciones, pero sólo el ratón puede pasar el puntero sobre algo. Lo que quiero decir, es que una pantalla táctil sólo puede decirle dónde está tocándola, pero no dónde está la mano. En cambio, cuando el cursor del ratón pasa por encima de lo que se quiere presionar, espera por la pulsación del botón para realizar una acción. En lo que respecta a diseño, si el juego puede funcionar con pantallas táctiles de toque simple, también funcionará con el ratón.

En realidad, hay un tercer tipo de dispositivo de entrada que se debe considerar. Tabletas con estilete y las PC tablet. Normalmente, estos dispositivos sólo se ven en manos de artistas gráficos, pero una tableta con estilete tiene todas las ventajas. Colocación física (donde va la punta del estilete, va el puntero) y pasar el puntero sobre un objeto.

Si de verdad se quiere volver loco, puede considerar los dispositivos de puntero basados en cámaras, como el Wiimote de Nintendo, PlayStation Move de Sony, Eyetoy y Natal de Microsoft. Los dos primeros son como un ratón y los dos últimos son un tipo de multitáctil.

Aun así, todos estos son sistemas de puntero. Todos tienen alguna manera de especificar la posición, con distintos grados de precisión y facilidad. El más sencillo sigue siendo la pantalla táctil; con posiciones sin capacidad de pasar el puntero por un objeto. Si inicia su diseño ahí, normalmente puede encontrar una manera de hacer que funcione con cualquier otro puntero.

La ausencia de teclado en los portátiles me convenció a diseñar el juego de modo que funcione totalmente con un puntero (pantalla táctil, ratón). Esta manera de uso también es más fácil para usuarios casuales. No hay necesidad de quitar la mano del ratón, sólo hacer "clic, clic" y adelante.

Así como el multitáctil normalmente se usa para trazos táctiles, el acelerómetro normalmente se usa para detectar la orientación (vertical, horizontal). El fijar el juego en una sola orientación en la PC es la solución usual. Sin embargo, en iPhone terminé utilizando la rotación física como mecánica en el juego, de modo que tuve que encontrar una forma de hacer que funcionara en las plataformas sin acelerómetros. Esto me llevó a agregar botones de rotación en la interfaz.

Ahora el juego está listo para todo. :)



P: ¿Hay algo del proceso de migración que le haya sorprendido o que haya resultado más difícil o más fácil de lo que pensó?

Mike Kasprzak:

No hubo muchas sorpresas en la labor, pero una vez que entré de lleno a la programación de gráficos, me sorprendió que Intel GMA 950 es un mejor chipset de gráficos de lo que creía. Comparado con el PowerVR MBX en el iPhone original, el GMA lo sobrepasa por mucho y puede generar fácilmente el doble de resolución con rendimiento de sobra. Incluso estoy usando un netbook en vez de una laptop porque sencillamente funciona bien. Si estoy haciendo trabajo en verdad difícil, entonces voy a mi PC de trabajo quad-core. Pero no siempre la necesito. Puedo moverme dentro de la casa o sentarme afuera, sin necesidad de cargar mi vieja y enorme laptop de "reemplazo de equipo de desktop".

De modo que la sorpresa fue: En realidad puedo hacer el trabajo de migración en el sistema mismo.



P: ¿Se perdieron o mejoraron funciones?

Mike Kasprzak:

El juego es casi idéntico, pero para cumplir con el plazo, quité unas pocas funciones (modos de juego). Éstas regresarán junto con muchas, muchas más en la siguiente actualización. Se trataba solamente de cuestiones de tiempo, no de algo que un netbook no pudiera hacer, sólo de mi propio tiempo para hacerlo.

Asimismo, la versión para netbook era para mí como un espacio de "borrón y cuenta nueva", es decir, donde podía hacer correcciones y cambios al diseño pues no había riesgo de estropear juegos guardados o puntuaciones récord en la versión establecida para iPhone. De modo que, aunque unos cuantos modos de juego fueron eliminados inicialmente, muchas otras cosas ya habían cambiado. Se trata de uno de los lujos que se obtienen al crear sus propios diseños y hacerlos migrar. Si decide que desea cambiar algo o intenta hacer algo de forma diferente, puede hacerlo en una nueva plataforma. Obviamente no se quiere hacer nada que arruine el juego, pero llevar un juego a una nueva plataforma es una libertad interesante.



P: ¿Cómo se comparan las maneras de jugar de los dos dispositivos?

Mike Kasprzak:

¡Son muy parecidas! La mecánica de juego detrás de Smiles es óptima en una pantalla táctil, pero también funciona realmente bien con el ratón. Esa es la otra parte de AppUp que me emociona. Ahora mismo hablamos de equipos netbook, pero los fabricantes de equipos originales están creando equipos PC Slate y MID con el mismo hardware (Intel Atom). En circunstancias normales, no habría forma de colocarse frente a los clientes en este mercado, pero AppUp tiene una posición única para darles servicio.



P: ¿Requirió de asistencia por parte de Intel en el proceso? ¿Cómo fue el proceso de envío y la asistencia de AppUp en comparación con el de iPhone?

Mike Kasprzak:

El envío no tuvo complicaciones. En verdad no tuve ningún problema, pero con las preguntas que tuve, recibí las respuestas de Intel de manera muy razonable. Toda plataforma tiene sus matices para el proceso de envío, es por ello que se trata de un envío para aprobación y no simplemente de colocar una descarga en Internet. AppUp es definitivamente uno de los más fáciles.



P: ¿Haría algo diferente? ¿Tiene alguna recomendación para desarrolladores que buscan migrar de iPhone a AppUp?

Mike Kasprzak:

Mi consejo es, en definitiva, considerar la portabilidad desde el inicio. Sin duda alguna, tengo mucho que decir al respecto, pero en esencia no es muy difícil de comprender. Escriba el código del juego en C/C++, considere usar OpenGL ES y cree las imágenes originales con altas resoluciones. De esta forma, el código y los activos del juego podrán llevarse a cualquier parte. Conéctelo con algo como SDL, y en un día o poco más podrá estar listo para funcionar en PC.

0