mac下面xcode+ndk7配置cocos2dx & box2d的跨ios和android平台的游戲教程


    這篇教程是介紹如何使用cocos2d-x和box2d來制作一個demo,且此demo能同時運行於ios和android平台。在繼續閱讀之前,建議您先閱讀上一篇教程

 

    首先,按照上一篇教程,搭建好mac下面的cocos2dx和android開發環境,注意配置好一些環境變量的值,比如$COCOS2DX_ROOT等。然后使用Xcode建立一個cocos2dx_box2d項目,命名為Box2DTest,如下圖所示:

 

然后,還是和之前一樣,用cocos2dx安裝目錄下的腳本來創建一個android工程,我們把這個工程命名為Box2DTest。

接下來,就是創建一個makefile了:

首先,選擇一個你最喜歡的文本編輯器,然后cd到剛剛這個Box2DTest的android目錄下面,然后打開terminal,輸入:

vim makefile

//然后會創建一個新的窗口,接着輸入i進入編輯模式,然后鍵入下面3條語句
clean:
rm -rf libs/
rm -rf obj/

請特別注意,這里的clean:是頂格輸入的,而兩條rm語句是使用tab鍵縮進的。如果不縮進,則輸入make clean的時候會報錯。

輸入完后,esc(回到命令模式) :wq 回車,保存並退出。ok,搞定,然后輸入make clean,如果出現下面的輸出,則表示ok了:

rm -rf libs/
rm -rf obj/

接下來,把一些android相關的文件拷貝到之前建好的ios項目下面去。(注意$符號+環境變量名,是你之前定義的目錄的別名,即$COCOS2DX_ROOT表示你的cocos2dx的解壓縮目錄

第一步,把android這個文件夾從$COCOS2DX_ROOT/Box2DTest/android/拷貝到iphone的工程目錄下面去,和ios這個文件夾在同一目錄。(最終的目錄是Box2DTest/Box2DTest/android/)

第二步,把Android.mk這個文件從$COCOS2DX_ROOT/Box2DTest/Classes/拷貝到Box2DTest/Box2DTest/Classes/下面

第三步,把Android.mk從$COCOS2DX_ROOT/cocos2dx/拷貝到Box2DTest/Box2DTest/libs/cocos2dx/下面

第四步,把android文件夾從$COCOS2DX_ROOT/CocosDenshion拷貝到Box2DTest/Box2DTest/libs/CocosDenshion/下面去。

第五步,把Android.mk從COCOS2DX_ROOT/Box2D/拷貝到Box2DTest/Box2DTest/libs/Box2D/下面去。

最后一步,把platform這個文件夾從$COCOS2DX_ROOT/cocos2dx/platform拷貝到Box2DTest/Box2DTest/libs/cocos2dx/下面去。

當然,這個platform有點大,大約有114M,其中除了android,third_party和ios這三個文件夾不能刪除之外,其它文件夾全部可以刪除,特別注意!!!!

不要刪除那些文件,一個文件也不能刪除!!!!

接下來,我們配置一下build_native.sh腳本,把它替換成如下所示:

# set params
NDK_ROOT=/Volumes/Mydata/android-ndk-r7b/
COCOS2DX_ROOT=../libs/cocos2dx
GAME_ROOT=../
GAME_ANDROID_ROOT=$GAME_ROOT/android
RESOURCE_ROOT=$GAME_ROOT/Resources

# make sure assets is exist
if [ -d $GAME_ANDROID_ROOT/assets ]; then
rm -rf $GAME_ANDROID_ROOT/assets
fi

mkdir $GAME_ANDROID_ROOT/assets

# copy resources
for file in $RESOURCE_ROOT/*
do
if [ -d $file ]; then
cp -rf $file $GAME_ANDROID_ROOT/assets
fi

if [ -f $file ]; then
cp $file $GAME_ANDROID_ROOT/assets
fi
done

# build
$NDK_ROOT/ndk-build -C $GAME_ANDROID_ROOT $*

注意,這里的NDK_ROOT要改成你自己的路徑。


然后修改android/jni/Android.mk,修改成下面的樣子:


同時把Application.mk修改成下面的樣子:

APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
APP_MODULES := cocos2dx_static cocosdenshion_shared box2d_shared game_logic_static game_static

然后,把android/jni/helloworld/Android.mk修改成下面的樣子:


然后把Classes/Android.mk修改成下面的樣子:(以后游戲越做越大,則可以在LOCAL_SRC_FILES里面再添加源文件即可

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := game_logic_static

LOCAL_MODULE_FILENAME := libgame_logic

LOCAL_SRC_FILES := AppDelegate.cpp \
HelloWorldScene.cpp

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../libs/cocos2dx \
$(LOCAL_PATH)/../libs/cocos2dx/platform \
$(LOCAL_PATH)/../libs/cocos2dx/include \
$(LOCAL_PATH)/../libs/Box2D/ \


LOCAL_STATIC_LIBRARIES := png_static_prebuilt
LOCAL_STATIC_LIBRARIES += xml2_static_prebuilt
LOCAL_STATIC_LIBRARIES += jpeg_static_prebuilt
LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static

LOCAL_SHARED_LIBRARIES := cocosdenshion_shared
LOCAL_SHARED_LIBRARIES += box2d_shared

include $(BUILD_STATIC_LIBRARY)

$(call import-module,cocos2dx/platform/third_party/android/modules/libpng)
$(call import-module,cocos2dx/platform/third_party/android/modules/libxml2)
$(call import-module,cocos2dx/platform/third_party/android/modules/libjpeg)

然后打開終端,依次輸入:

make clean
./build_native.sh

如果一切順利,你將得到如下輸出:

Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Install : libcocosdenshion.so => libs/armeabi/libcocosdenshion.so
Install : libbox2d.so => libs/armeabi/libbox2d.so
Install : libgame.so => libs/armeabi/libgame.so

最后,就和上一篇教程中一樣了,打開eclipse,導入工程,然后運行就ok啦。下面給出v880的最終運行效果圖:


   從配置box2d的過程中,我們可以看出,這跟上一篇教程中配置的方法差不多,唯一不同的是一些Android的mk文件的差別。大家可以參考一下ndk的文檔,然后結合本實例就可以找出端倪了。下次如果配置ffmpeg或者其它第三方的c/c++庫,都可以采用這種方式來配置。

   如果有人成功配置了其它第三方庫,歡迎留言分享,學雷鋒,做好事:)


要論壇交流,請點擊傳送門

參考資料:http://gameit.ro/2011/08/creating-a-cocos2d-x-box2d-android-project/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM