zoukankan      html  css  js  c++  java
  • 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/

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    HTML iframe, 获取iframe子页面中的元素(基于JavaScript)
    微信小程序中引入VR全景图
    git创建分支,提交代码详细流程(保姆级)
    Vue项目中使用Axios封装http请求
    node搭建本地服务器后端解决跨域问题
    ant design Upload组件上传文件类型
    使用nodejs连接mysql数据库实现增删改查 连接Node.js时报错“Cannot GET /”
    后端返回文件流,前端处理进行文件下载
    JS判断是否是数组的四种做法
    Js常用方法:JS字符串截取、数组截取等
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4497243.html
Copyright © 2011-2022 走看看