2012-02-08 12 views
7

मैंने एक्सकोड के साथ एक कोकोस 2 डी-एक्स ऐप विकसित किया है जो इसे आईओएस डिवाइस पर एक्सकोड से लॉन्च करते समय पूरी तरह से काम करता है।Cocos2d-x: एक्सकोड से एंड्रॉइड (ग्रहण के माध्यम से) के साथ विकसित कोकोस 2 डी-एक्स प्रोजेक्ट को कैसे पोर्ट करें?

अब, मैं इसे एंड्रॉइड पर पोर्ट करना चाहता हूं। मैं समझता हूं कि मुझे इसे "एक्सकोड प्रोजेक्ट" को ग्रहण करने के लिए एक तरीका ढूंढना है ताकि इसे संकलित करने और इसे एंड्रॉइड डिवाइस पर लॉन्च करने में सक्षम हो सके।

मैं वर्तमान में इस ट्यूटोरियल निम्नलिखित एक संकर आईओएस/एंड्रॉयड परियोजना के लिए इस परियोजना को परिवर्तित करने के लिए कोशिश कर रहा हूँ: http://gameit.ro/2012/01/creating-an-iphone-and-android-cocos2d-x-hybrid-project-updated/#comment-640

फिर भी, मैं नहीं दिख रहा है मेरी सीपीपी वर्गों (Cocos2d-x सी ++ वर्ग) ग्रहण में प्रदर्शित होने के किसी भी जब मैं इस संकर प्रोजेक्ट खोलने और मैं निम्नलिखित त्रुटियों जब 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 

मैं Eclispe के लिए कुछ फ़ाइलें आयात करने के लिए है? क्या मुझे कुछ android.mk फ़ाइलों को संशोधित करना है? कुछ और?

कोई भी मेरी मदद कर सकता है या इस विषय पर एक ट्यूटोरियल लिख सकता है? धन्यवाद !!

उत्तर

12

इसके बारे में लगता है कि आप अपने कस्टम जोड़ने की जरूरत से वर्ग के लिए फ़ाइलों को बनाया/Android.mk इस तरह LOCAL_SRC_FILES खंड में:

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

आपको एंड्रॉयड निर्माण फ़ाइल जाने के लिए में ऐसा करने की जरूरत नई फाइलों के बारे में जानें जिन्हें निर्माण प्रक्रिया में शामिल करने की आवश्यकता है।

आपको इस परियोजना में जोड़े गए प्रत्येक नई स्रोत फ़ाइल के लिए, यह करना होगा, afaik।

+2

ओएमजी, यह कैसे cocos2d-x ट्यूटोरियल में शामिल नहीं है !!! – OMGPOP

0

@clawoo सही है, लेकिन आपको परियोजना में जो भी फ़ाइल जोड़ती है उसे शामिल करने की आवश्यकता नहीं है। 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) 

कृपया याद रखें, कि आप कहीं और फ़ाइलों है, उदाहरण के लिए:

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

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

आप निम्न कर सकते

और

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

मेरे मामले में यह काम किया।

संकेत:

आप संकलक के बारे में शिकायत के साथ समस्याओं है: 'नहीं नियम लक्ष्य बनाने के लिए /.../', मैं obj/स्थानीय/armeabi/objs-डिबग का ग्रहण सामग्री में नष्ट करने के लिए सुझाव है/game_shared फ़ोल्डर। फिर, obj फ़ोल्डर की build_native.sh और रीफ्रेश (F5) सामग्री को पुन: चालू करें।