Box2D是众所周知的2D物理引擎,它有很多语言版本,我们AS开发者可能比较熟悉AS3版本,但如果在移动设备上跑AS3的Box2D效果很不理想。大家都知道著名的手机游戏“愤怒的小鸟”就是使用的Box2D的C++类库,如果Flash应用也可以调用高效的C来进行物理运算那么一定是非常Happy的事情。感谢 猫粮 的帮助,我找到了Box2D的作者为我们写好的一个AIR与C++的调用接口类,本文我将介绍如何利用这个ANE类库来实现Flash对C++版本Box2D的调用。 这个ANE类库可以到 https://github.com/mnem/box2d_ane 去下载 动手之前先确认如下几个事情:
1,Xcode版本需要是4.1。在4.2下无法打包C++的动态链接类库,原因我仍在与内部同事沟通中。
2,AIR打包工具ADT版本在3.0以上。这是对ANE的最低支持版本。
3,需要具备iOS开发的经验以及条件(开发者帐号) 在下载下来的压缩包中,打开extension文件夹。其中,文件夹default是AS3的版本源代码,native文件夹里是原生类资源,ane文件夹中是AS类资源(以前介绍过,任何一个ANE项目都包括一个原生类和AS类)。 1,建立项目
双击native/ios/NAH_B2D/NaHBox2D.xcodeproj,可以直接创建一个Xcode项目。这个项目通过box2d文件夹下的cmake文件自动创建项目结构,所以在创建项目的时候需要保持native文件夹下的结构不变。 打开FlashBuilder,使用ane文件下的资源创建一个Flex Library项目。这个项目用来创建ANE的AS类文件。 2,创建应用
在开发者后台创建一个应用,申请证书以及设备授权文件(具体操作见我之前的博客文章)。
在FlashBuilder中创建一个AS项目,作为test项目,引用上一步创建的Library。 我在本文提供了一个例子,大家可以最后下载下来运行来看效果。这篇文章不对代码进行罗嗦,但我要对这个Box2D的ANE版本做一个大致的功能介绍。这是这个例子的运行视频:
这个Box2D的ANE接口类需要用到AS3类来提供数据类型,如果你熟悉如何用AS3版本来创建材质和物体,那么在这个ANE版本里也是几乎一样的代码。但它并非是一个完善的接口类库,它虽然提供了一些基本的方法,比如world创建,body和材质的创建,但对于AS类接口来说还远远不够。类库中只有对规则矩形的创建接口,而没有对圆形和自定义刚体的创建接口。所以这是一套需要开发者自行扩展的API,需要开发者对Box2D的使用需求有一定的了解,并且熟悉C++代码。我并非是一个Box2D的老用户,只用它开发过一两个项目,所以在这个例子里我只对它做了有限的几个扩充。大家可以从代码注释中找到我添加的几个AS接口和C++方法。希望这个程度的介绍可以帮到一些切实需要使用C类来提高效率的开发者,它与AS类库的效率对比是非常显著的。下面是我准备的一些下载资源
Box2D_ANE_Example.zip
|