2012-02-08 7 views
7

He desarrollado una aplicación Cocos2d-X con XCode que funciona perfectamente cuando la inicio desde XCode en un dispositivo iOS.Cocos2d-x: cómo portar un proyecto Cocos2d-x desarrollado con XCode a Android (a través de Eclipse)?

Ahora, quiero portarlo a Android. Lo que entiendo es que tengo que encontrar una forma de importar mi "proyecto XCode" a Eclipse para poder compilarlo e iniciarlo en un dispositivo Android.

Actualmente estoy tratando de convertir este proyecto para un proyecto de iOS híbridos/Android siguiendo este tutorial: http://gameit.ro/2012/01/creating-an-iphone-and-android-cocos2d-x-hybrid-project-updated/#comment-640

Sin embargo, no veo ninguna de mis clases cpp (cocos2d-x clases de C++) que aparecen en Eclipse cuando abro este proyecto híbrido y tengo los siguientes errores al intentar compilar con build_native.sh:

Compile++ thumb : game_logic <= AppDelegate.cpp 
jni/../../Classes/AppDelegate.cpp:14:23: error: IntroMenu.h: No such file or directory 
jni/../../Classes/AppDelegate.cpp:15:23: error: GameLayer.h: No such file or directory 
jni/../../Classes/AppDelegate.cpp:16:26: error: ScoreManager.h: No such file or directory 
jni/../../Classes/AppDelegate.cpp: In member function 'virtual bool AppDelegate::applicationDidFinishLaunching()': 
jni/../../Classes/AppDelegate.cpp:99: error: invalid use of incomplete type 'struct ScoreManager' 
jni/../../Classes/AppDelegate.h:17: error: forward declaration of 'struct ScoreManager' 
jni/../../Classes/AppDelegate.cpp:101: error: invalid use of incomplete type 'struct ScoreManager' 
jni/../../Classes/AppDelegate.h:17: error: forward declaration of 'struct ScoreManager' 
jni/../../Classes/AppDelegate.cpp:118: error: 'GameLayer' has not been declared 
jni/../../Classes/AppDelegate.cpp:120: error: 'IntroMenu' has not been declared 
make: *** [obj/local/armeabi/objs-debug/game_logic/AppDelegate.o] Error 1 
macbook-de-regis-andre-2:android regisandre$ ./build_native.sh 

¿tengo que importar algunos archivos para eclispe? ¿Debo modificar algunos archivos android.mk? ¿Algo más?

¿Alguien puede ayudarme o escribir un tutorial sobre este tema? Gracias !!

Respuesta

12

Desde el aspecto de que usted necesita para añadir su personalizado creado archivos de clases/Android.mk en la sección LOCAL_SRC_FILES así:

LOCAL_SRC_FILES := AppDelegate.cpp \ 
        HelloWorldScene.cpp \ 
        IntroMenu.cpp \ 
        GameLayer.cpp \ 
        ScoreManager.cpp 

que tiene que hacer esto con el fin de dejar que el fichero de construcción androide conocer los nuevos archivos que deben incluirse en el proceso de compilación.

Tendrá que hacer esto, afaik, por cada nuevo archivo fuente que agregue al proyecto.

+2

OMG, ¿cómo es que no está incluido en el tutorial cocos2d-x? – OMGPOP

0

@clawoo tiene razón, pero no tiene que incluir todos los archivos que agregue al proyecto. En su lugar, puede hacer lo siguiente y olvidarse de eso;)

Para no tener que actualizar el archivo cada vez que se agrega un nuevo archivo fuente al proyecto, puede usar el siguiente script (encontrado aquí: http://www.cocos2d-x.org/boards/6/topics/5321)

dirs := $(shell find $(LOCAL_PATH) -type d) 

cppfilestemp1 := $(shell find $(LOCAL_PATH) -type d) 
cppfilestemp2 := $(shell find $(cppfilestemp1) -name *.cpp) 
cppfilestemp3 := $(sort $(cppfilestemp2)) 
cppfiles := $(subst $(LOCAL_PATH)/,,$(cppfilestemp3)) 

LOCAL_SRC_FILES := \ 
      $(cppfiles) 

Por favor recuerde, que si tiene los archivos en otro lugar, por ejemplo:

LOCAL_SRC_FILES := main.cpp \ 
../../../Classes/AppDelegate.cpp \ 
../../../Classes/HelloWorldScene.cpp \ 

puede hacer lo siguiente:

cppfilestemp1 := $(shell find $(LOCAL_PATH)/../../../Classes/ -type d) 

y

LOCAL_SRC_FILES := main.cpp 
LOCAL_SRC_FILES += $(cppfiles) 

En mi caso funcionó.

PISTA:

Si tiene problemas con el compilador quejándose: 'No hay ninguna regla para hacer diana /.../', sugiero eliminar en los contenidos de Eclipse/armeabi/objs-depuración obj/local/carpeta juego_compartida A continuación, vuelva a ejecutar los contenidos build_native.sh y refresh (F5) de la carpeta obj.

Cuestiones relacionadas