先通过 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 box2d cocosdenshion game_logic game
这里我们需要将 Box2D 模块加入,这样在编译 C++ 代码是,会将 Box2D 模块编译成为 so 库文件。加入后是这样的:
APP_STL := stlport_static
APP_CPPFLAGS += -frtti
APP_MODULES := cocos2d box2d cocosdenshion game_logic game
然后是 Box2DTest/android/jni/Android.mk 文件。这个文件我们需要检查 subdirs 这个变量。这个变量的值是指定一些公共库的头文件的目录位置。在这个变量中我们需要确保将 Box2D 的库目录放入了其中。加入后完整的 subdirs 变量的赋值语句是这样的:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
Box2D \
cocos2dx \
CocosDenshion/android \
))
subdirs += $(LOCAL_PATH)/../../Classes/Android.mk $(LOCAL_PATH)/helloworld/Android.mk
include $(subdirs)
接下来是 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_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := game
LOCAL_SRC_FILES := main.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../../cocos2dx \
$(LOCAL_PATH)/../../../../cocos2dx/platform \
$(LOCAL_PATH)/../../../../cocos2dx/include \
$(LOCAL_PATH)/../../../../ \
$(LOCAL_PATH)/../../../../Box2D \
$(LOCAL_PATH)/../../../Classes
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../../libs/$(TARGET_ARCH_ABI)) \
-lcocos2d -llog -lgame_logic \
-lbox2d
include $(BUILD_SHARED_LIBRARY)
加入这两个路径之后,我们要想在我们的 C++ 源代码中引入 Box2D 库的话,只需要在 C++ 源代码中加入这样的语句就可以了。
#include "Box2D/Box2D.h"
这样我们就可以在享受 cocos2d 引擎给我们带来的开发便利的同时享受到 Box2D 物理引擎给我们带来的开发乐趣了。
分享到:
相关推荐
《Cocos2D-X游戏开发技术精解》详细介绍如何使用Cocos2D-X引擎开发自己的移动平台游戏。全书共15章,主要内容包括:Cocos2D-X引擎简介;如何建立跨平台的开发环境;引擎的核心模块——渲染框架;如何实现动态画面和...
Cocos2d-x源于Cocos2d,是一款开源游戏引擎项目,是一款基于对原有iOS平台cocos2d重写为C++的开源代码,封装了OpenGL,Box2d,LibCurl,LibPng等开源的跨平台代码。由于基于C++和STL特点使其广泛应用于游戏开发、移动...
cocos2d-x使用box2d实现弹弓游戏。
第1章 Cocos2D-X引擎的介绍 1 1.1 何为游戏引擎 1 1.1.1 游戏的核心—引擎 1 1.1.2 引擎的特点 2 1.1.3 知名的引擎介绍 4 1.1.4 引擎的分类 5 1.2 Cocos2D-X引擎的来历 8 1.3 引擎的版本 9 1.4 下载与安装 10 1.5 ...
cocos2d-x,box2d来做碰撞检测
Cocos2d-x加Box2D制作弹弓类游戏 由于资源无法下载所以自己根据博客写了一份 有些bug 见谅哈 博客:http://mssyy2010.blog.51cto.com/4595971/847000
Title: Cocos2d-x by Example: Beginner’s Guide, 2nd Edition Author: Roger Engelbert Length: 250 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2015-04-30 ISBN-10: ...
cocos2d-x 用于android iphone pc上移动游戏开发的框架库与应用模板 cocos2d-1.0.1-x-0.11.0 版本的 chm 类与函数 文档! 包括:box2d文档。
最简单的helloworld实例上添加物理引擎cocos2d-x box2d 物理引擎
愤怒的松鼠,完整源码cocos2d-x编写
学习cocos2dx后自己整的物理引擎(box2d)的类似helloworld的示例代码。cocos2d-x_Box2d实例代码,完整可运行的工程例子。对初学cocos2dx的物理引擎开发的同志们非常有用!
一个cocos2d-x使用box2d的简单明了的示例。适合初学者。
物理编辑器 cocos2d box2d.很好用哦
修改自子龙山人翻译的教程弹球 vs2008编译运行通过
瘸腿蛤蟆笔记42-cocos2d-x-3.2 Box2d物理引擎Motor Joint
对应于子龙山人的 (译)如何使用cocos2d和box2d来制作一个Breakout游戏:第二部分(完) 的cocos2d-x的代码
本文基于cocos2d-x2.2.3,并未在3.0之后的版本下编写,仅仅是提供一个思路,方便日后其他场景使用到该功能点可以参考,也没有详细讲述box2d物理引擎的基础知识,相关知识请自行多参考其他技术文档。本资源只是代码和...
瘸腿蛤蟆笔记39-cocos2d-x-3.2 Box2d物理引擎自由落体代码
网上找到的一个游戏实例 不过版本是cocos2dx 1.0.x的 我做了些修改 能在2.0.3上正常运行
瘸腿蛤蟆笔记40-cocos2d-x-3.2 Box2d物理引擎实现作用力