Cocos2D-X: Desarrollo de aplicaciones moviles multiplataforma
Cocos2D-X es la extensión a otras plataformas del framework cocos2D para iPhone. Mantiene la estructura del API original pero permite utilizar otros lenguajes de programación como C++, Lua, Javascript y C#. Además habilita el desarrollo en sistemas operativos: Windows, Mac y Linux, y amplía el soporte hacia plataformas móviles (iOS, Android, Windows Phone) e inmóviles (win32, Linux, Windows 8, Mac OS X).
¿Otro framework multiplataforma?
Si, otro pero este es un Framework para gobernarlos a todos, un Framework para encontrarlos, un Framework para atraerlos a todos … bueno, no realmente pero a diferencia de otros frameworks multiplataforma, que están basados en JavaScript/HTML5, Cocos2D-X utiliza la API gráfica de OpenGL ES mejorando el desempeño de la aplicación en el dispositivo.
El maestro Firtman Maximiliano lo comentaba hace unos meses:
No se puede discutir Assembler > C > Java/.NET > JavaScript/HTML5. Escoge el apropiado según la situación, siempre se pierde algo.
Es decir, si programas en Assembler directamente obtienes un nivel de rendimiento mayor que en HTML5 (además de un puesto en el Olimpo de los programadores) y Cocos2D-X al utilizar OpenGL ES (escrito en C) permite que las aplicaciones sean más eficientes y tengan mejor desempeño gráfico.
¿Cómo empezar?
Hace unas semanas divagaba la opción de migrar una aplicación del App Store al Google Play (Find the Ball) e inicié la respectiva consulta sobre Cocos2D-X. Por eso comparto el periplo sobre cómo configurar Cocos2D-X para desarrollar una aplicación Android en un entorno Windows basado en los articulos de Jesús Bosch y Jean-Yves Mengant (la travesía inicial se realizo abordo de un Mac pero en pro del multiplataformismo este artículo es para entornos Windows):
1. Descargar las librerías de cocos2D-X y descomprimir en c:/dev/
2. Descargar e instalar Android SDK en la ruta c:/dev/android/
3. Descargar las librerías de Android NDK en la ruta c:/dev/android/
4. Descargar e instalar “Eclipse Classic” así como el ADT plugin. (Asegurarse de ejecutar siempre Eclipse como administrador)
5. Descargar e instalar Cygwin. (Durante la instalación habilitar la categoría “Devel” con “Install”) [aquí puede ir a preparar café]
6. Para verificar que todo siga en su sitio ejecutar c:/dev/cocos2d-2.0-x-2.0.3/build-win32.bat [aquí puede tomarse el café que preparó]
7. Actualizar los valores de las variables CYGBIN, ANDROIDTOOLS, NDKROOT en el archivo c:/dev/cocos2d-2.0-x-2.0.3/create-android-project.bat
set _CYGBIN=c:\cygwin\bin
set _ANDROIDTOOLS=c:\dev\android\android-sdk\tools
set _NDKROOT=c:\dev\android\android-ndk-r8b
8. Ejecutar el archivo c:/dev/cocos2d-2.0-x-2.0.3/create-android-project.bat e ingresar:
“package path” com.mdw.prueba
“project name” prueba
“id” de la última versión del Android SDK que este instalada en el equipo
9. Agregar la siguiente instrucción al inicio del archivo c:/dev/cocos2d-2.0-x-2.0.3/prueba/proj.android/build_native.sh
export NDK_ROOT=”c:\dev\android\android-ndk-r8b”
10. Ejecutar el terminal de Cygwin que debe estar en c:/cygwin/Cygwin.bat
11. Windows pide “permiso” para todo así que desde el terminal de Cygwin escribir:
$ chmod -R 777 /cygdrive/c/dev
12. Desde el terminal Cygwin acceder a la ruta de la app y ejecutar build_native.sh
$ cd /cygdrive/c/dev/cocos2d-2.0-x-2.0.3/prueba/proj.android
$ ./build_native.sh
13. Desde Eclipse: import->Existing Android Code Into Workspace
14. Desde Eclipse: Seleccionar el proyecto “click derecho” -> properties -> Java Build Path Source-> “Link Source”. Ubicar y agregar la ruta “c:\Dev\cocos2d-2.0-x-2.0.3\cocos2dx\platform\android\java\src”
15. Desde Eclipse: Seleccionar el proyecto “click derecho” -> properties -> Java Compiler-> Compiler compliance level: 1.6
16. Desde Eclipse: En caso que el AndroidManifest.xml presente error, cambiar:
android:icon=”@drawable/ic_launcher”
17. Para verificar que todo va en su sitio Desde Eclipse: Run->Run [agrego la configuración del emulador para Android]
Ahora puede programar desde cualquier editor de texto (Bloc de notas), compilar desde el terminal (Cygwin) y ejecutar la app en Eclipse.
Lo más apropiado es que Eclipse permita editar el programa, compilarlo y ejecutarlo. Por lo tanto debe instalar el complemento para eclipse del lenguaje C/C++ y agregar esta ruta “c:\cygwin\bin” al PATH de Windows. Una vez hecho esto, prosiga:
18. Convertir el proyecto en C/C++: seleccionar el proyecto File->New->Other “C/C++ -> Convert to a C/C++ Project” (si aparece un cuadro de dialogo, presionar amablemente “No”)
19. Compilar desde Eclipse con Cygwin: Seleccionar el proyecto “click derecho” -> properties -> C/C++ Build. Deshabilitar “Use default build command” y escribir en “Build command”:
bash ${workspace_loc:/com.mdw.prueba.prueba}/build_native.sh NDK_DEBUG=1 V=1
20. Project -> Build All
21. Eliminar advertencias en el código: seleccionar el proyecto “click derecho” -> properties -> C/C++ General-> Path and Symbols-> GNU C++ y agregar:
c:\dev\android\android-ndk-r8b\platforms\android-9\arch-arm\usr\include
c:\dev\cocos2d-2.0-x-2.0.3\cocos2dx\include
22. Agregar las clases principales de la App (código de la aplicación): seleccionar el proyecto “click derecho” -> properties -> C/C++ General-> Path and Symbols-> Source Location. Click “link folder” y en cuadro de dialogo habilitar “Link to a folder in the file system”
Buscar la ruta= C:\Dev\cocos2d-2.0-x-2.0.3\prueba\Classes
23. Deshabilitar errores de sintaxis que no son errores (o sí lo son pero del analizador sintáctico de Eclipse, no del código): Seleccionar el proyecto “click derecho” -> properties -> C/C++ General->Code Analysis. Seleccionar “Use Project Settings” y deshabilitar “Syntax and Semantic Errors”
Listo, ahora la aplicación se encuentra en la carpeta /Classes/ y se puede editar, compilar y ejecutar en Eclipse todo el proyecto.
Cocos2D-X al estar basado en cocos2D para iPhone conserva la misma estructura de su antecesor por lo tanto recomiendo revisar la Guía iOS que aborda este tema y explica los conceptos básicos.
Una pregunta ¿Y esto mismo pero en Linux es muy complicado o no?
Es más sencillo porque no requiere Cygwin. Aquí explican la configuración para Linux http://blog.plicatibu.com/developing-with-cocos2d-x-for-android-on-linux/
Hi there, just became aware of your blog through Google,
and found that it’s really informative. I am gonna watch out for brussels. I’ll be grateful if you continue this in future.
A lot of people will be benefited from your writing.
Cheers!
Its like you read my mind! You appear to know so much about this,
like you wrote the book in it or something. I think that
you could do with a few pics to drive the message home a bit, but instead of that,
this is fantastic blog. A fantastic read. I’ll definitely be back.
La única diferencia de usar Linux sería las rutas de los ficheros. Debería ser similar.
Gracias amigo me fue muy útil.
Por favor, puedes decirme si he entendido bien como funciona cocos2dx:
El código se encuentra en /Classes/ y ese código es el que se va a utilizar cuando se genere la app para iOS, Max, Win o Android. Es decir, yo puedo realizar toda mi app desde Eclipse, que una vez completa solo tendré que compilarla para lo que quiera.
¿Es así?
Si.
Hola
¿Alguien me puede ayudar?
Busco un curso presencial de Cocos2D basico porque quiero iniciarme y solo con tutoriales me quedo un poco corta.
He visto este: http://agbo.biz/tech/curso-cocos2d-basico/
¿Alguien me da su opinion?
GENIAL el blog!
Antes que nada, gracias por tu articulo.
Yo voy bien hasta el paso 17 puedo ejecutar mi proyecto en eclipse; sin embargo despues de aplicar el paso 18 me aparecen muchos errores en el archivo main.cpp
Unresolved inclusion: “AppDelegate.h” en la linea: #include “AppDelegate.h”
Symbol ‘cocos2d’ could not be resolved en la linea: using namespace cocos2d;
Function ‘setJavaVM’ could not be resolved en la linea: JniHelper::setJavaVM(vm);
etc..
Espero puedas ayudarme. Saludos y gracias de antemano
Me perdí en esta parte
“Ahora puede programar desde cualquier editor de texto (Bloc de notas), compilar desde el terminal (Cygwin) y ejecutar la app en Eclipse.”
En que lenguaje debo programar? o mas bien que tipo de proyecto debo de crear en el eclipse para luego poder compilarlo y ejecutar la app?