lunes, 10 de febrero de 2014

Cocos2dx (Compilación)

Categoría: Cocos2dx

Nivel: Básico


En este artículo, voy a explicar cómo compilar los ejemplos que vienen en la librería Cocos2dx y como crear un proyecto multiplataforma para comenzar a desarrollar un juego. Aunque Cocos2dx permite hacer uso de lenguajes de script como lua y javascript para el desarrollo, yo solo me voy a centrar en c/c++ ya que es el lenguaje que más flexibilidad ofrece y el más compatible con todas las plataformas.

En la versión Cocos2dx 2.2.2 para compilar el código c/c++ sobre la plataforma Android se hace uso de un script bash de Linux que es necesario en versiones antiguas del NDK de Android, en la versión Cocos2dx 3.0 han eliminado estos scripts y hacen uso de scripts en Python que permiten compilar en Windows con las últimas versiones de NDK.

Debido a que la versión 3.0 acaba de salir y no tiene plantillas para todas las plataformas actualmente, iré actualizando el artículo según vayan añadiendo plantillas para las diferentes plataformas.


Creación de un proyecto multiplataforma:

(NOTA: a partir de ahora, la variable '%cocos2dx%' la usare como el directorio raíz de cocos2dx que contiene los directorios de la librería)

La creación de los proyectos para todas las plataformas se realiza mediante el script en Python que existe en la ruta '%cocos2dx%\tools\cocos2d-console\bin\cocos.py', si se han seguido los pasos del artículo dedicado a la instalación, se habrá creado una variable de entorno a la ruta, de modo que no es necesario entrar en ella para ejecutar el script.

Para crear el proyecto se abre una consola y se inserta el comando 'cocos', esto mostrara los comandos disponibles, la creación del proyecto se realiza con el comando 'new', de modo que insertamos 'cocos new --help' y se mostraran todas las opciones disponibles para la creación.

Básicamente este es el comando para crear un proyecto para todas las plataformas:

cocos new {Project Name} -p {Package Name} -l {Lenguaje} -d {Project Path}

Project Name: Nombre del proyecto que será creado
Package Name: Nombre del paquete en Java que será usado en el marco de aplicación de Android.
Lenguaje: Lenguaje usado para la creación del proyecto (Yo usare C++ = cpp).
Project Path: Ruta donde será creado el proyecto.

Como ejemplo crearé un proyecto para todas las plataformas disponibles usando c++:

cocos new MyGame -p com.dgzornoza.games -l cpp -d D:\dgonzalez\Projects\Games

El script creara una copia de las plantillas para todos los proyectos en la ruta que se haya indicado conteniendo una estructura como la siguiente:

Classes: Directorio con el código fuente común del juego, conteniendo una escena básica.
Cocos2d: Directorio raíz de la librería cocos2dx que es copiado para mantener las referencias al código fuente en todos los entornos.
proj.x: Directorios con los diferentes marcos de aplicación para cada plataforma específica.
Resources: Directorio con los recursos comunes del juego.

NOTA: Como se puede observar, se crea una copia de la librería completa en cada proyecto nuevo creado, esto tiene la ventaja de poder crear el proyecto en la ruta deseada, pero la desventaja de que cada proyecto ocupara unos 300MB, y una vez compilado será como mínimo 1GB.

Ahora solo queda compilar los diferentes marcos de aplicación para las plataformas, esto se puede realizar de dos formas diferentes:

  1. Consola: Mediante el script 'cocos.py' se puede compilar sin necesidad de abrir y configurar un entorno específico, esta opción es muy útil para probar las diferentes plataformas de forma rápida.

  2. IDE: Configurando el entorno correspondiente a la plataforma que se quiera compilar. Esta opción es útil en el entorno con el que se quiera desarrollar (en mi caso con Visual Studio y win32) y también si se quiere depurar en alguna plataforma especifica o para tener un mayor control sobre la compilación y resultado final.

Explicare ambas formas para todos los entornos para poder elegir la mejor al caso. Al ejecutarse el proyecto de prueba se podrá ver la pantalla del juego conteniendo la escena de ejemplo con el logo de cocos2dx:


Windows:

  1. Consola: Dentro del directorio del proyecto creado, se ejecuta el siguiente comando:
    cocos run -p win32
  2. IDE: Se entra en el directorio proj.win32, se abre la solución 'MyGame.sln' con Visual Studio (si el directorio donde reside no esta marcado como confiable es posible que se tengan que recargar los proyectos).
    Este es el proyecto con el que voy a trabajar para el desarrollo en Cocos2dx, ya que es el que más rápido va a compilar y el que menos requisitos necesita, una vez se tenga parte del código se puede compilar y probar en los diferentes dispositivos para verificar su correcto funcionamiento en todos ellos.

    La estructura de la solución contiene las librerías básicas:

    • libAudio: Librería con soporte para el audio.
    • libchipmunk: Librería con el motor de físicas chipmunk.
    • libcocos2d: Librería de cocos2dx.
    • MyGame: Proyecto principal creado para desarrollar el juego.

    Para compilar y ejecutar, se establece 'MyGame' como proyecto de inicio en el explorador de soluciones y se pulsa F5 para ejecutar.


WinRT:

Actualmente no está disponible, según los desarrolladores estará disponible en breve.


WP8:

  1. Consola: Actualmente no está disponible la opción de compilación con la consola.

  2. IDE:Se entra en el directorio 'proj.wp8-xaml' y se abre la solución, para compilar y ejecutar solo hace falta pulsar F5.


Android:

  1. Consola: Antes de ejecutar el comando para compilar y ejecutar, se deberá iniciar el emulador o dispositivo físico deseado y desbloquearlo (en caso contrario puede dar algún error). Para iniciar el emulador lo más rápido sin abrir eclipse es ejecutar en una consola 'android avd' para abrir AVD Manager y gestionar los emuladores de forma visual. Otra forma es insertar el comando 'android list avd' para ver los emuladores configurados y ejecutar el deseado mediante 'emulator @nombre_emulador'

    Una vez iniciado y desbloqueado el dispositivo, dentro del directorio del proyecto creado, se ejecuta el siguiente comando:

    cocos run -p android -j 4

    (-j es un parámetro de la opción 'compile' que se puede usar en 'run' para acelerar el proceso de compilación con 4 o más jobs al mismo tiempo)

  2. IDE: Para compilar sobre esta plataforma hay que seguir una serie de pasos ya que cocos2dx no tiene una plantilla específica para ningún IDE de desarrollo en Android. Las aplicaciones Android usan JAVA pero se permite interoperabilidad con c/c++ y ASM mediante el JNI (Java Native Interface), es posible configurar Eclipse para compilarlo todo, pero como yo voy a usar Visual Studio para el desarrollo de c/c++, solo usare Eclipse para compilar el marco de aplicación en JAVA.

    Como he comentado anteriormente, Cocos2dx 3.0 hace uso de un script en Python para compilar la librería estática c/c++ con el juego mediante el NDK de Android.

    1. Ejecutar el script 'build_native.py' en el directorio proj.android. Si se quiere compilar con las opciones por defecto se puede ejecutar directamente el script, en caso de querer modificar las opciones de compilación, se tiene que abrir una consola y navegar a la ruta del script tras lo cual se pueden ver las diferentes opciones del script ejecutando:

      build_native.py –help

      Por defecto será compilado en modo 'Debug' y para la API 10 (Android 2.3.3).

      Otra opción para compilar es usar el script cocos.py, si no se quiere ejecutar con ningún emulador, puede compilarse con el siguiente comando:

      cocos compile -p Android -j 4
    2. Abrir Eclipse y seleccionar menú File -> Import, se selecciona como fuente a importar código existente de Android y en la siguiente ventana como directorio raíz se selecciona la carpeta 'proj.android' del juego de prueba.


    3. Añadir la referencia a las clases JAVA de cocos2dx usadas por el marco de aplicación. Para ello se entra en las propiedades del proyecto (botón derecho -> propiedades), se selecciona 'Java Build Path' pestaña 'Source' botón 'link source':

      Y en la ventana que aparece, se establece la ruta a las clases base de cocos2dx para Android que están en la ruta: '%cocos2dx%/cocos/2d/platform/android/java/src'


      Ahora ya se puede ejecutar la aplicación desde el menú Run -> Run As -> Android Application y si todo ha ido bien, se iniciara el emulador con el juego.

      NOTA: es posible que al iniciar la aplicación de un error y el log indique algo así:

      Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace

      Esto se corrige instalando la librería de soporte de Android, Boton derecho en el proyecto -> Android Tools -> Add support library.


Iphone/Ipad, Mac OS X:

(Los siguientes pasos deben realizarse en un Mac OS X 10.7+)

  1. Consola: Dentro del directorio del proyecto creado, se ejecuta uno de los siguientes comandos según se quiera ejecutar para IOS o Mac OS X:

    IOS: cocos run -p ios
    Mac OS X: cocos run -p mac
  2. IDE: En la carpeta proj.ios está el archivo de proyecto xcode para estas plataformas, una vez abierto se selecciona el proyecto deseado y se ejecuta 'Cmd+R'


Compilando los ejemplos de Cocos2dx

La librería contiene algunos ejemplos para mostrar las características disponibles, existen ejemplos para lua, javascript y c++, pero no todos están disponibles para todas las plataformas.

De todos los ejemplos, 'TestCpp' que reside en la ruta '%cocos2dx%/samples/Cpp/TestCpp' contiene casi todas las características de la librería y es una buena referencia para aprender a usarla.

Para compilar los ejemplos lo ideal es usar el IDE correspondiente. A continuación indico como compilar los ejemplos en las diferentes plataformas:


Windows:

En la ruta principal '%cocos2dx%/build' reside la solución 'cocos2d-win32.vc2012.sln', una vez abierta con VS2012, se podrán ver todas las librerías de cocos2dx y todos los ejemplos disponibles de javascript, lua y c++, tan solo hay que establecer el ejemplo deseado como proyecto de inicio y ejecutarlo con F5.


WinRT:

Actualmente no está disponible, según los desarrolladores estará disponible en breve.


WP8:

Actualmente solo está disponible descargando la versión de desarrollo del repositorio en GitHub, en la siguiente reléase ya será incluida en el código fuente.


Android:

No existe plantilla para ningún IDE de desarrollo de Android, de modo que los pasos para compilar algún ejemplo son los mismos que he usado en la creación del proyecto multiplataforma mediante el IDE eclipse, pero esta vez debe compilarse el código c++ de los ejemplos usando el script en Python existente en la ruta '%cocos2dx%/build', una vez ejecutado serán compilados todos los ejemplos especificados en el script. Cuando termine de compilar, se deberá importar y configurar eclipse como he comentado anteriormente.


Iphone/Ipad, Mac OS X:

En la carpeta '%cocos2dx%/build' está la carpeta 'cocos2d_samples.xcodeproj' con el archivo de proyecto xcode para estas plataformas, una vez abierto se selecciona el proyecto deseado y se ejecuta 'Cmd+R'


Con los ejemplos compilados y conociendo como se puede crear un proyecto multiplataforma, ya se sabe lo básico para comenzar a probar la librería. En el siguiente artículo hablare sobre algunos conceptos básicos necesarios para comenzar a escribir código.

¿Has tenido algún problema en la compilación de los proyectos?


Saludos y… "a fluzear"

 

16 comentarios:

  1. Está genial, por favor, sigue con estoy tutoriales :)

    ResponderEliminar
  2. Hola amigo, apenas ayer empece a indagar en cocos2d-x. Descargue el Coco2d-x v.2.2.2 (instalado en "c:\"), Python v.2.7 (instalado en "C:\Archivos de programa" y el Visual Studio 2010 Ultimate. Tengo instalado Windows 7 Ultimate.. El problema que aparece cuando compilo "built-win32.bat" es que me muestra muchas advertencias y 18 errores, por consiguiente cuando pruebo las aplicaciones solo me corre la sencilla HelloCpp y TestCpp hay varios de los efectos que no funcionan, las otras aplicaciones las corre si mostrar nada. Me puedes indicar que debo corregir.... Te anexo una captura https://drive.google.com/file/d/0B9G6pLi6m_1OOWlId1hnc1NVS2M/edit?usp=sharing

    ResponderEliminar
    Respuestas
    1. Hola nando, me temo que el bat no esta muy bien configurado, aunque no importa por que no es necesario, lo único que hace es compilar el proyecto con las herramientas de VS, algo que puedes hacer mediante el propio Visual Studio.
      Abre directamente la solución 'cocos2d-win32.vc2012.sln' con VS y genera la solución con Crtl + May + B. Esto no debería de darte ningún error y podras depurar cualquier proyecto incluido en ella.
      Aunque debes saber que el ejemplo mas completo que muestra las funcionalidades del motor es TestCpp.

      Otra cosa que debes tener en cuenta es que si vas a comenzar algún proyecto, lo ideal es que comiences a trabajar con la versión 3.0, te va a resultar muy difícil migrar de la 2.2 a la 3.0 ya que existen grandes cambios en la API y mucha refactorización de código para implementar el nuevo estándar c++ 11. Ademas si estas comenzando la versión 2.2 te va a liar mucho con los conceptos ya que se ha modificado gran parte del sistema de render en la versión 3.0.

      Eliminar
  3. Hola veras tengo un problema. Te explico.
    Me he bajado el VS2012 y bien, compila el proyecto!

    Mi idea es hacer juegos para Android. Y quise probar de compilarlo en eclipse para utilizar el simulador de mobile...y alli me peta

    Al compilarlo me dice que "hay errores en el projecto"

    Que hago? puedo trabajar en VS y tener la tranquilidad que funcionara en mobil?

    gracias!

    ResponderEliminar
    Respuestas
    1. Hola ratghar.
      En principio se puede usar cualquier IDE, yo uso VS por que es el que mejor conozco y con el que obtengo mayor productividad en el desarrollo, la compilación sobre Win32 es muy rápida para desarrollar la base del juego. Una vez se tiene la base ya se pueden probar funcionalides especificas en las diferentes plataformas.

      Nunca tendras la seguridad de que funcione en todas las plataformas, y cada nueva funcionalidad tendras que ir probándola en todas, en principio la base del Engine (lo que es el escenegraph) si que debería de funcionar en todas correctamente (salvo algún bug del Engine que suele corregirse rapidamente), pero si usas alguna librería de red, audio, etc es posible que necesites algunas modificaciones, por ejemplo Windows pone no soporta mp3 para el audio y tienes que usar WAV, pero son modificaciones menores.
      Si usas Cocos2dx es por la gran flexibilidad y compatibilidad con todas las plataformas, centrarte solo en Android no tiene sentido, pero si inicialmente tu destino es un dispositivo Android lo ideal es que ya lo empieces a programar y depurar sobre ese dispositivo y posteriormente compilarlo en los demás si lo necesitas.

      ¿Cómo estas compilando el proyecto, con el IDE o con la consola?.
      ¿Qué versión de cocos2dx estas usando?
      Si pones el log del error es posible que te pueda ayudar.

      Eliminar
    2. Este comentario ha sido eliminado por el autor.

      Eliminar
  4. Hola David,
    Te cuento, he creado mi aplicacion en base al IDE de Visual Studio 2012 sin ningun problema. Ahora viene mi duda. ¿Como puede ser llevada mi aplicación creada en Visual hacia mi dispositivo Android(apk)?, ¿Como hago ese traspaso?. Salu2.

    Gracias.

    ResponderEliminar
    Respuestas
    1. Hola Johans.
      En el punto 2 indico las diferentes formas de realizarlo, en caso de usar el IDE eclipse, se implementara directamente en el dispositivo si este esta conectado y configurado, en caso de usar la consola para compilar mediante el comando:

      - cocos compile -p Android -j 4

      luego puedes instalar el apk mediante la herramienta adb de la SDK Android:

      - adb install

      en la pagina oficial tienes la información:
      http://developer.android.com/tools/help/adb.html#move

      También puedes copiar el apk en la tarjeta sd y luego instalarla desde el móvil.
      Ya contaras como te ha ido

      Eliminar
    2. Hola David! hacerca de crear el apk tal y como has dicho.

      Donde lo creO?

      Hago cocos compile -p Android -j 4

      desde la carpeta del proyecto en cmd, pero no me crea ningun apk :S

      Eliminar
    3. Hola ratghar.
      Si compilas con ese comando y no te da ningún error (al terminar debe poner 'BUILD SUCCESSFUL'), deberas ver los apks en la carpeta 'proj.android/bin'

      Eliminar
    4. Hola David!
      pues ahora entiendo no me pone ese comentario.

      Te explico:

      voy desde Commander a la carpeta de mi proyecto, a la principal que desde allí accedo al proyecto de visual estudio, o de android etc.

      Desde allí pongo el codigo de compilacion. Me sale este error, te copio ya la última linea.

      make.exe: Leaving directory `C:/TUTO30/proj.android'
      building apk
      Can't find "target" in file "C:\TUTO30\proj.android\project.properties"
      ------------

      Parece que es un error de ruta no? 1r accede con "/" luego pone "\" o como he de solucionarlo? y como lo haria :S

      Mil gracias!

      Eliminar
    5. Hola ratghar.
      El archivo que indicas contiene la ruta a la libreria cocos2dx para compilarla en android y el target de compilación, esto será usado por ANT para compilar el proyecto
      Por defecto al crear el proyecto tendras algo como esto:

      target=android-10

      android.library.reference.1=../cocos2d/cocos/platform/android/java

      El parámetro target indica la versión del SDK de Android que será usada para la compilación y es el que parece que te esta dando error.
      Mira que numero tienes y verifica que tienes el SDK correspondiente, para ello abre una consola y escribe 'android', si tienes las variables de entorno correctamente se abrirá el Android SDK Manager donde tienes que tener instalado el SDK correspondiente.
      En el ejemplo he puesto debe estar instalado el 'SDK platform' de Android 2.3.3 (API 10).

      Verificalo y comentas como te ha ido.

      Eliminar
  5. Me ha Costado mucho crear un ADV que me funcionara, por eso he tardado tanto!
    1r: el archivo que mencionas
    -android.library.reference.1=../cocos2d/cocos/platform/android/java

    Yo no lo Tengo!
    En cocos2d/cocos/ notengo platform ._.

    Luego, Hago un ADV de Android 2.3.3 abro el emulador y al compilar me vuelve a dar error. Este en concreto

    make.exe: Leaving directory `C:/Users/Rayod/Desktop/ALGORITMOS/TUTORIALES/TUTO30
    +/proj.android'
    building apk
    Can't find "target" in file "C:\Users\Rayod\Desktop\ALGORITMOS\TUTORIALES\TUTO30
    +\proj.android\project.properties"

    Osea no lo encuentra el properties del projecto de android...pero tampoco me deja abrir ese archivo :S

    MIl GRacias por tu paciencia

    ResponderEliminar
    Respuestas
    1. Hola ratghar.
      ¿Qué versión de cocos2dx tienes?
      ¿Es posible que el proyecto se hubiese creado en otra versión?

      Una de las cosas que no me gusta de los desarrolladores es que hay cambios muy radicales entre versiones cercanas, y mayormente en la estructura de directorios, yo uso el código fuente descargado de github y cada vez que me actualizo el código fuente tengo problemas por las estructura de directorios ya que les gusta cambiarlos de sitio.

      La versión 3.0 tiene el directorio 'platforms' en cocos2d/cocos/2d/platforms
      mientras que la 3.2 que actualmente es la ultima reside en cocos2d/cocos/platform

      De modo que dependiendo de la versión con la que hayas creado el proyecto, estará en un sitio u otro,

      Si no estas seguro y tienes problemas lo mas sencillo es lo siguiente:
      Crea un nuevo proyecto y compilalo directamente, si todas las variables de entorno están creadas debería compilar sin problemas,
      Una vez compilado mover tu código de un proyecto a otro es tan sencillo como copiar y reemplazar la carpeta 'Classes' y 'Resources' en el proyecto destino.

      Hay que tener en cuenta que cada versión de cocos2d que te descargues suele tener cambios significativos y puede que un proyecto no te compile y tengas que modificar referencias y/o clases, de modo que aconsejo que se use la misma versión en todos los equipos de desarrollo para evitar problemas y si algún dia se quiere actualizar realizarlo con prudencia, tiempo y paciencia.

      Eliminar
    2. Estoy utilizando la version 3.0

      No me va la parte de Android...estoy mirándolo de muchas formas y no hay manera...ya lo volveré a mirar en un futuro.

      Gracias por la ayuda, mas adelante volveré a pelearme con esto ;D

      Eliminar
    3. Hola ratghar.
      Si estas empezando, lo ideal es que elimines la versino 3.0 y te bajes la 3.2, hay grandes mejoras y correcciones de bugs.
      Si ya tienes las variables de entorno y todo los demás en principio debe servirte.
      En cualquier caso si sigues teniendo problemas, dimelo y si puedes nos conectamos por Skype o teamviewer para ver que puede estar ocurriendo.

      Eliminar