08
2011
04

BOX2D的选择建议

     BOX2D越来越火了,基本上已经稳固了自己在游戏开发者心目中的地位。其实很早之前就在关注BOX2D了,原本在flash游戏中应用非常普遍,近两年移动平台的兴起才再IOS和Android中崭露头角。我个人觉得,愤怒的小鸟成功只是一个偶然,不信就去逛逛flash游戏网站,你会发现很多精致、有创意又耐玩的游戏。(不过Rovio对游戏事业的专注和热情是值得大家学习的)

目前我知道的Android平台使用BOX2D有三种方式,官方的JBOX2D,libgdx封装的JNI版BOX2D,还有微云SDK里的JNI版BOX2D。

     1)JBOX2D。纯正、稳定、跨平台、官方支持,唯一的缺点是速度慢,这跟JAVA的虚拟机有关,大量的临时对象和数据运算不能像C/C++那样被及时free掉是主要原因。比起JNI版的确实速度略逊一筹,但也没有网上传言的那么夸张,现在的Android手机CPU动不动就1GHZ,内存动不动就几百M,跑JBOX2D还是绰绰有余的(勿信PC上的模拟器)。如果你的游戏跑起来卡,主要问题就在程序上,是不是时间步设置得太小了?是不是迭代设置得太多了?手机上的休闲游戏,每秒12~20帧足够了。还有就是图象是不是即时旋转的,不要相信Matrix效率有多高,不要动态地旋转图片,推荐预先生成0~90°的图片,精度不用那么高,每5°或10°生成一张,然后翻转+镜像贴出0~360°的图片,这样的速度比即时翻转快出n倍。

     2)libgdx。Angle、LGame等很多开源引擎都选择了它封装的box2d,可见对它的可用性是充分肯定的。libgdx的作者估计内流满面,大家貌似只看上他的box2d部分了,其实libgdx整体都很优秀。libgdx box2d的JNI代码写得非常清晰,运行速度非常快,使用方法也很接近原生的JBOX2D,我就是看c++版的文档来开发JAVA的,差别不大,毫无鸭梨。不过据不少人反映,libgdx封装的box2d存在bug,我也遇到莫名其妙报错退出的问题,至今没找到原因,调试起来比较困难。

     3)微云SDK(http://www.wiyun.com/web/wiengine,我依然不是枪手)。这个2D游戏框架目前很高调,对它了解不多,略微看了一下,BOX2D、LUA、粒子系统、XML都做了封装,甚至场景元素,地图图素都做了细致地封装,人性化程度可见一斑!不过它似乎忽略了一点,独立游戏人之所以做独立游戏人,因为他们什么都喜欢自己动手,封装得越细致就说明约束越大,自由发挥余地就越小。或许你把饭盛好,用勺子送到独立游戏人的嘴边,换回的却是一个“呸!”,呵呵开个玩笑,我也是独立游戏人。有点偏题了,回头说BOX2D,微云同样是JNI封装的C代码,粗略看了下文档以及JNI代码,不像是直接用的libgdx的,它再一次封装到了嘴边,框架结构让我匪夷所思,习惯了BOX2D的朋友可能要花点时间熟悉一下。

« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。