cocos2d 游戏引擎和 Box2D 物理引擎都是什么,干什么用的,这里我就不多废话了。这里主要讲的是基于 C++ 的 cocos2d-x 在 Android 系统上开发游戏时如何与 Box2D 物理引擎结合。

首先简单介绍一下我这里所使用的环境,其他环境的配置方法也是大同小异的。
操作系统:Archlinux
cocos2d-x 版本:cocos2d-0.99.5-x-0.8.5
先通过 create-android-project.sh 脚本创建一个新的 cocos2d-x for android 工程。注意,在执行该脚本前需要先对该脚本进行编辑,来设定 NDK_ROOT 和 ANDROID_SDK_ROOT 两个变量的值(在该脚本文件的最前面几行)。NDK_ROOT 变量用来指定你计算机上 android ndk 的安装位置;ANDROID_SDK_ROOT 变量用来指定你计算机上 android sdk 的安装位置。
工程建立完毕后,会在和 create-android-project.sh 同目录下看到你刚刚新建的工程文件夹。这里我们假设我们刚刚建立了一个名为 Box2DTest 的工程。则工程目录机构如下:
Box2DTest
--android
--Classes
--Resource
Classes 文件夹下主要是 C++ 源代码文件,该文件夹是你主要编写逻辑的地方。Resource 文件夹是资源文件,例如图片素材、音效文件等资源文件都必须放到这个文件夹下面。当然,这篇日志不是讲 cocos2d-x 入门。而是讲怎样在 cocos2d-x 中使用 Box2D,所以这里我们主要要看的是 android 文件夹。
android 文件夹下面是个标准的 android 工程。通过 Eclipse 可以方便的将该工程导入并运行。当我们编写完毕我们的 C++ 代码后通过执行 android 文件夹下的 build_native.sh 脚本,可以将我们编写的 C++ 代码连同 cocos2d-x 引擎以及其他一些库编译成 so 文件,以供 android 程序通过 jni 调用它们。
默认的 cocos2d-x for android 工程并没有将 Box2D 物理引擎库引入到工程中。如果我们想要在我们的程序中使用 Box2D 引擎,我们需要对编译脚本进行一些设置。首先我们看看一个默认的 cocos2d-x for android 工程都有哪些编译脚本。
Box2DTest
--android
--jni
--Android.mk
--Application.mk
--helloworld
--Android.mk
mk 文件是 Android NDK 所使用的 make file 。一个标准的 cocos2d-x for android 工程默认有三个 mk 文件,这三个文件在编译 C++ 代码时起到重要的作用。而要在自己的工程中使用 Box2D 物理引擎,则需要对这三个 mk 文件进行编辑,否则无法编译通过。
首先是 Box2DTest/android/jni/Application.mk 文件。这里我们需要关注的是 APP_MODULES 这个变量,这个变量后面的值是指定我们需要编译的模块的名称。默认是这样的:
APP_MODULES := cocos2d cocosdenshion game
这里我们需要将 Box2D 模块加入,这样在编译 C++ 代码是,会将 Box2D 模块编译成为 so 库文件。加入后是这样的:
APP_MODULES := cocos2d box2d cocosdenshion game
然后是 Box2DTest/android/jni/Android.mk 文件。这个文件我们需要检查 subdirs 这个变量。这个变量的值是指定一些公共库的头文件的目录位置。在这个变量中我们需要确保将 Box2D 的库目录放入了其中。加入后完整的 subdirs 变量的赋值语句是这样的:
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
Box2D \
cocos2dx \
CocosDenshion/android \
         ))
接下来是 Box2DTest/android/jni/helloworld/Android.mk 文件。在这个文件中我们主要编辑 LOCAL_C_INCLUDES 变量。该变量指定我们 C++ 源代码中 include 的头文件的查找位置。默认的 LOCAL_C_INCLUDES 赋值是这样的:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../cocos2dx \
$(LOCAL_PATH)/../../../../cocos2dx/platform \
$(LOCAL_PATH)/../../../../cocos2dx/include \
$(LOCAL_PATH)/../../../../CocosDenshion/include \
$(LOCAL_PATH)/../../../Classes 
默认的  LOCAL_C_INCLUDES 并没有将 Box2D 的头文件目录加入进去,在这种情况下我们在自己的 C++ 源代码中引入 Box2D 的话是无法编译通过的。简便的方法是加入下面两个路径:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../cocos2dx \
$(LOCAL_PATH)/../../../../cocos2dx/platform \
$(LOCAL_PATH)/../../../../cocos2dx/include \
$(LOCAL_PATH)/../../../../CocosDenshion/include \
$(LOCAL_PATH)/../../../..  \
                     $(LOCAL_PATH)/../../..
$(LOCAL_PATH)/../../../Classes 
最后还要在 Box2DTest/android/jni/helloworld/Android.mk 文件中的 LOCAL_LDLIBS 变量上加入下面这个值:
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../../libs/armeabi) \
-lcocos2d -llog -lcocosdenshion \
 -lbox2d \
-L$(call host-path, $(LOCAL_PATH)/../../../../cocos2dx/platform/third_party/android/libraries) -lcurl
加入这两个路径之后,我们要想在我们的 C++ 源代码中引入 Box2D 库的话,只需要在 C++ 源代码中加入这样的语句就可以了。
#include  "Box2D/Box2D.h"
这样我们就可以在享受 cocos2d 引擎给我们带来的开发便利的同时享受到 Box2D 物理引擎给我们带来的开发乐趣了。
由www.J2meGame.com精心收集。

Cocos2d-x 结合Box2D开发Android游戏配置方法相关推荐

  1. 用cocos2d-android开发android游戏时调用box2d中的native本地函数问题

    用cocos2d-android开发android游戏时调用box2d中的new World(Vector2,boolean)时,出现如下报错: "java.lang.Unsatisfied ...

  2. 用Unity3d开发Android游戏

    Unity3d是个强大的游戏引擎,可以很轻松的将游戏发布到Android平台上,今天我就来讲讲如何用Android来开发Android游戏. 首先我们要下载Android SDK,可以在http:// ...

  3. PhoneGap与Jquery Mobile结合开发android应用配置

    由于工作需要,用到phonegap与jquery moblie搭配,开发android应用程序. 这些技术自己之前也都没接触过,可以说是压根没听说过,真是感慨,在开发领域,技术日新月异,知识真是永远学 ...

  4. IDEA基于kotlin开发android程序配置小结

    IDEA功能极其强大,和微软的宇宙第一IDE不相上下.用了很长时间,对它配置的完善性产生了近乎迷信的感情.似乎只要走正常渠道,用它来配置,没有不成功的. IDEA是开发android原生程序的利器,a ...

  5. 安卓 c 语言开发环境搭建,用C++语言开发Android程序 配置开发环境

    如果你是一个C++语言的死忠,你喜欢C++语言到了偏执的状态,如果不想学习Java语言,或者你很讨厌Java语言,如果你认为Java虚拟机的内存占用太多和执行低效.如果你过度关注Andoird程序的执 ...

  6. 【转】unity开发android游戏(一)搭建Unity安卓开发环境

    http://blog.csdn.net/chenggong2dm/article/details/20654075 1,下载安装Java的JDK: http://www.oracle.com/tec ...

  7. unity开发android游戏(一)搭建Unity安卓开发环境

    1,下载安装Java的JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html (JDK中,包含JRE) 如果是6 ...

  8. android游戏1024代码,castlegame 可简单快速开发android游戏。我总结的教程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 安装 fpcupdeluxe-i386-win32.exe 先安装这个. fpc 选择 304版本 即stable 版本 lazarus 选择184版本 ...

  9. Unity3D开发Android游戏(一)搭建Unity安卓开发环境

    1,下载安装Java的JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html(JDK中,包含JRE) 2,下载A ...

最新文章

  1. 重磅发布!Google语义分割新数据集来啦!又一个分割SOTA模型
  2. sudo及其配置文件sudoers
  3. opendolphin_使用DolphinDB进行机器学习
  4. 在Windows系统中安装WAMP
  5. C++class类(I)
  6. jvisualvm.exe使用时涉及的配置、使用方式
  7. 圆周率的代码表示,以及对其的理解。
  8. lua urlencode urldecode URL编码
  9. JS助记 ----- 正则表达式
  10. hive 时间函数_Hive常用大法(聚合/排序/分组)
  11. 一种手机保密桌面的想法
  12. VsCode如何设置成中文
  13. mysql strlength_mySQL教程 第7章 存储过程和函数
  14. 网站建设-网站设计怎么样做的更好?
  15. 新品周刊 | 雀巢推出感CAFÉ鎏光咖啡;联合利华联合汉堡王推出真香植物基皇堡...
  16. 24. 两两交换链表中的节点
  17. DDOS攻击防护HTTP篇
  18. linux系统资源查看详解
  19. Ring3无敌进程让你的进程变得和smss.exe一样支持64
  20. python自动化测试学习笔记合集二

热门文章

  1. 经典的 div + css 鼠标 hover 下拉菜单
  2. Streamr助你掌控自己的数据
  3. ThinkPHP系的两个东东OneThink和ThinkCMF
  4. java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
  5. oracle服务开机自启动
  6. Day Tips:关于搜索小问题
  7. C Primer Plus(三)
  8. Close window without alert
  9. VideoCLIP-FacebookCMU开源视频文本理解的对比学习预训练,性能SOTA!适用于零样本学习!...
  10. 遇上放养型导师,论文就业该咋办?