近年来HTML5风起云涌,特别在移动端已经被更多的人熟识。H5跨平台,在线更新等特性,被人们津津乐道。而后就出现了各类H5的框架,甚至多达100种,真是让开发者眼花缭乱,笔者做为一个从事H5游戏开发一年的开发者,从我这一年的摸索,比较,最终选择cocos2d-x jsbinding(如下简称jsb)做为移动游戏开发框架,并在接下来的几篇博文中慢慢讲述一些我对这个框架的认识和感觉。javascript
就目前来说,移动端的框架最火,最牛叉的非cocos2d-x莫属,甚至达到了每上10款手游,7款是cocos2d-x的境界。jsb做为cocos2d-x的javascript脚本调用版本,保持了cocos2d-x的稳定,高效率的同时,能和cocos2d-html5无缝结合,真正作到了一套代码,多个平台运行,而且在移动平台保持了100%原生效率的这样一个品质。能够说是目前html5在移动端最好的解决方案。如今相似的Hybird引擎有很多了,有uc的X-canvas,opera的sphinx,ludei,game closure,还有即将发布的youzi2d,这些引擎都有一个特色,硬件加速,由于如今Html5最大的瓶颈就是效率,那jsb和这些框架比起来,究竟怎么样呢?如下从我使用的角度来说,列出了几点,我的意见,仅供参考。 html
1.执行效率。上面提到的效率问题,这个天然是jsb的重点。主要分为2块,一块是图形渲染的效率。还有一块是脚本执行效率。上述几款框架都宣传的是100%硬件加速,可是这里面的加速效果并非相同的,jsb的图形渲染效率和cocos2d-x是等同的,以小米1手机为例,jsb同屏跑600个动画(没有用批渲染,真正的600次draw),帧数在45帧左右,900个动画是35帧左右,一样的手机在跑sphinx下面的一个打飞机demo,帧数在48帧左右,打飞机中的同屏幕精灵不超过100个,x-canvas没有深刻研究,可是跑过一个里面的切水果,切中的瞬间会有明显的卡顿,我不知道是否是渲染的问题,对x-canvas熟悉的童鞋也能够画上600个动画看看帧数。html5
js脚本效率这块,jsb用的是firefox的开源spidermonkey,android环境开启了JIT。实际用的状况是够用,可是要当心的用,特别是大的循环要避免,例如大配置文件循环。若是其余框架用的是google的V8引擎的话,会比spidermonkey要快,可是有一点,ios是不能开启JIT的,因此ios环境V8是用不了的,由于V8是强制开启JIT的。另外有一点是,jsb支持物理引擎,但这个也是用js来调用C++的chipmunk库的,这样保证了效率。java
2.跨平台。得益于cocos2d-x,如今通吃市面上全部安卓机器,旧的如几年前的单核国产机,到如今最新的三星S4,ios天然是包括ip4以上的全部机型和全部pad。听说wp也立刻要并入cocos2d-x主分支。除此以外,得益于cocos2d-html5,上述一套一样的js代码,还能够运行于支持H5的浏览器环境,手机端的浏览器只要是支持H5特性的都能跑,例如ios的safrai,chrome,uc,海豚浏览器,qq浏览器,可是移动浏览器的渲染能力有限,相对于native来讲,性能差距仍是不小的。android
3.开源。MIT协议的开源引擎意味着什么?意味着你能够任意扩展你须要的底层接口,能够知足任意需求,只要原生可以实现。同时你能够打断点跟踪bug,这个打断点并非要去修改cocos2d-x的代码,这么作的目的是为了能更高的了解底层库的运做方式,从而来优化调节咱们调用的逻辑代码,还能快速定位bug,固然这个前提是你要对cocos2d-x的代码有必定的熟悉,好在cocos2d-x的源码写的很是优秀,就算是学习的角度来说,也是很是值得看的。ios
4.本地打包。配好了环境之后(建议用mac环境)能够完成打包测试,发布等部署,加入第三方渠道SDK,彻底由本身掌控。本地打包是相对于云端打包而言的,由于上述不少框架只能云端打包,云端打包方即是挺方便的,可是必须保证这个云端服务器是100%稳定的,否则到时候你想打包的时候服务器挂了,那你只能等待了。同时云端打包接入的第三方SDK是固定的,若是要加个云端没有提供SDK接口的渠道,那这个需求就实现不了了,因此我的认为云端打包比较适合我的开发者或者小型开发团队。web
5.调试。调试是开发程序的重头戏,jsb的调试不太理想,手机端的调试只能打log,好在有cocos2d-html5。cocos2d-h5的api是向下兼容jsb的,能够这么说,95%的问题,在网页上用cocos2d-h5就能够解决,剩下的5%。。只能在手机上调了,这个看我的对这个2d-x这个框架的熟悉程度。听说下一个jsb版本能够断点调试了,源码中也已经有好多关于debug功能的代码,相信这个功能不远了。chrome
6.原生接口。实际开发手游的时候须要不少和手机原生的接口,jsb在这里提供了CCEditbox(输入框),CCFileUtil(手机物理文件读取),网络这块支持xmlHttpRequest,websocket。值得一提的是websocket还支持arrayBuffer格式,能够直接传输二进制数据,不用作额外的转换,除此以外的接口须要本身写了,好比获取网络状态(3G,wifi),获取androidSD卡目录等等,这个看每一个项目的具体需求来,由于jsb采用spidermonkey编译器,只要是C++能够调用到的接口,js均可以调用到。具体android能够用JNI和C++进行通讯,而后C++再和js通讯,ios是OC和C++混编的,因此接口写起来更加容易,以后的博文会详细介绍,网上这方面资料也不少。canvas
7.源码保护。虽然是脚本,可是若是被人轻轻松松拿去看了,做为一个商业手游项目来说,仍是不太提倡的,特别是配置文件若是也采用的是js的话。。jsb除了常规的js压缩混淆外,还有个终极大杀器:bytecode。jsb经过一个工具将js脚本编译到spidermonkey直接读取的bytecode,这样既加快了脚本加载速度又解决了脚本的安全问题,就算你能想办法破解bytecode,破解完的仍是混淆过的js脚本,利用价值大大下降。api
8.社区活跃度。cocos2d-x的论坛(包括jsb)比较活跃的,天天有全球各类开发者讨论问题,jsb这块有核心开发者天天维护,基本上是有问必答,可是qq群好像不太活跃,可能你们都在埋头干活吧。
上面讲了这么多和其余H5框架的比较,再来讲说和cocos2d-x自己的比较。
js是cocos2d-x支持的另外一种语言lua同样,都是脚本语言,脚本语言最大的特色在于在线更新。在appstore这个审核至少1周的状况下,在线更新给了游戏很大的选择权利。虽然这种作法苹果并非所推崇的,可是无论你信不信,如今新的手游愈来愈多的用到在线更新,灵活的版本发布用过了都说爽。除此以外,游戏逻辑脚本由于相对少的涉及C++,因此crash的概率相对比C++要少一些,至少目前的观察如此,固然前提是要有高的脚本代码质量,并非由于脚本就能够随便乱写,一段js代码不一样的写法甚至有10倍,100倍的性能差距。
相比兄弟脚本lua,js的优点是面向对象,和网页版。可能也有人说面向过程也能够一样写好游戏,这个确实没错,可是大多数开发者的思惟仍是面向对象为主。至于网页版,除了调试的方便,至少还多了一个平台,虽然如今手机网页这块支持的并非太好。至于js的劣势,那就是js实在太灵活,因此相比lua的话仍是要牺牲一点性能,另外js的编译器十分复杂,通常的人驾驭不了他的源码,可是按照api调用方法仍是没什么问题的。
以上只是一点对jsb的认识,若是你正在项目框架选型的话,但愿可以给你一点帮助。