近年来HTML5风起云涌,特别在移动端已经被更多的人熟识。H5跨平台,在线更新等特性,被人们津津乐道。然后就出现了各种H5的框架,甚至多达100种,真是让开发者眼花缭乱,笔者作为一个从事H5游戏开发一年的开发者,从我这一年的摸索,比较,最终选择cocos2d-x jsbinding(以下简称jsb)作为移动游戏开发框架,并在接下来的几篇博文中慢慢讲述一些我对这个框架的认识和感受。

  就目前来讲,移动端的框架最火,最牛叉的非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和这些框架比起来,究竟怎么样呢?以下从我使用的角度来讲,列出了几点,个人意见,仅供参考。  

1.执行效率。上面提到的效率问题,这个自然是jsb的重点。主要分为2块,一块是图形渲染的效率。还有一块是脚本执行效率。上述几款框架都宣传的是100%硬件加速,但是这里面的加速效果并不是相同的,jsb的图形渲染效率和cocos2d-x是等同的,以小米1手机为例,jsb同屏跑600个动画(没有用批渲染,真正的600次draw),帧数在45帧左右,900个动画是35帧左右,同样的手机在跑sphinx下面的一个打飞机demo,帧数在48帧左右,打飞机中的同屏幕精灵不超过100个,x-canvas没有深入研究,但是跑过一个里面的切水果,切中的瞬间会有明显的卡顿,我不知道是不是渲染的问题,对x-canvas熟悉的童鞋也可以画上600个动画看看帧数。

js脚本效率这块,jsb用的是firefox的开源spidermonkey,android环境开启了JIT。实际用的情况是够用,但是要小心的用,特别是大的循环要避免,例如大配置文件循环。如果其他框架用的是google的V8引擎的话,会比spidermonkey要快,但是有一点,ios是不能开启JIT的,所以ios环境V8是用不了的,因为V8是强制开启JIT的。另外有一点是,jsb支持物理引擎,但这个也是用js来调用C++的chipmunk库的,这样保证了效率。

2.跨平台。得益于cocos2d-x,现在通吃市面上所有安卓机器,旧的如几年前的单核国产机,到现在最新的三星S4,ios自然是包括ip4以上的所有机型和所有pad。据说wp也马上要并入cocos2d-x主分支。除此之外,得益于cocos2d-html5,上述一套同样的js代码,还可以运行于支持H5的浏览器环境,手机端的浏览器只要是支持H5特性的都能跑,例如ios的safrai,chrome,uc,海豚浏览器,qq浏览器,但是移动浏览器的渲染能力有限,相对于native来说,性能差距还是不小的。

3.开源。MIT协议的开源引擎意味着什么?意味着你可以任意扩展你需要的底层接口,可以满足任意需求,只要原生能够实现。同时你可以打断点跟踪bug,这个打断点并不是要去修改cocos2d-x的代码,这么做的目的是为了能更高的了解底层库的运作方式,从而来优化调节我们调用的逻辑代码,还能快速定位bug,当然这个前提是你要对cocos2d-x的代码有一定的熟悉,好在cocos2d-x的源码写的非常优秀,就算是学习的角度来讲,也是非常值得看的。

4.本地打包。配好了环境以后(建议用mac环境)可以完成打包测试,发布等部署,加入第三方渠道SDK,完全由自己掌控。本地打包是相对于云端打包而言的,因为上述很多框架只能云端打包,云端打包方便是挺方便的,但是必须保证这个云端服务器是100%稳定的,不然到时候你想打包的时候服务器挂了,那你只能等待了。同时云端打包接入的第三方SDK是固定的,如果要加个云端没有提供SDK接口的渠道,那这个需求就实现不了了,所以个人认为云端打包比较适合个人开发者或者小型开发团队。

5.调试。调试是开发程序的重头戏,jsb的调试不太理想,手机端的调试只能打log,好在有cocos2d-html5。cocos2d-h5的api是向下兼容jsb的,可以这么说,95%的问题,在网页上用cocos2d-h5就可以解决,剩下的5%。。只能在手机上调了,这个看个人对这个2d-x这个框架的熟悉程度。据说下一个jsb版本可以断点调试了,源码中也已经有好多关于debug功能的代码,相信这个功能不远了。

6.原生接口。实际开发手游的时候需要很多和手机原生的接口,jsb在这里提供了CCEditbox(输入框),CCFileUtil(手机物理文件读取),网络这块支持xmlHttpRequest,websocket。值得一提的是websocket还支持arrayBuffer格式,可以直接传输二进制数据,不用做额外的转换,除此之外的接口需要自己写了,比如获取网络状态(3G,wifi),获取androidSD卡目录等等,这个看每个项目的具体需求来,因为jsb采用spidermonkey编译器,只要是C++可以调用到的接口,js都可以调用到。具体android可以用JNI和C++进行通信,然后C++再和js通信,ios是OC和C++混编的,所以接口写起来更加容易,之后的博文会详细介绍,网上这方面资料也很多。

7.源码保护。虽然是脚本,但是如果被人轻轻松松拿去看了,作为一个商业手游项目来讲,还是不太提倡的,特别是配置文件如果也采用的是js的话。。jsb除了常规的js压缩混淆外,还有个终极大杀器:bytecode。jsb通过一个工具将js脚本编译到spidermonkey直接读取的bytecode,这样既加快了脚本加载速度又解决了脚本的安全问题,就算你能想办法破解bytecode,破解完的还是混淆过的js脚本,利用价值大大降低。

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的认识,如果你正在项目框架选型的话,希望能够给你一点帮助。

 

认识cocos2d-x jsbinding的更多相关文章

  1. JSBinding / Plugins & Build Mozjswrap Library

    There are 2 libraries in Plugins: mozjs-31. This is SpiderMonkey library, built from https://github. ...

  2. cocos2d-js 3.0 RC0 手动绑定 C++调用js,js调用C++ jsbinding

    参考:http://www.tairan.com/archives/4902 参考文章是2.x版本的,对于3.0也许不合适了,没有深究. 代码:https://github.com/kenkozhen ...

  3. 面向基于英特尔® 架构的 Android* 的 CoCos2D

    Cocos2D 是一款游戏引擎,可与从电脑到手机等多种设备配合使用. 该引擎支持丰富的特性,可帮助创建出色的 2D 游戏.它甚至包含具备全面功能的物理引擎. CoCos2D 的核心元素是基本动画元素( ...

  4. 小尝试一下 cocos2d

    好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下.小结一下了解到的情况. 基本概念 首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 ...

  5. 采用cocos2d-x lua 制作数字滚动效果样例

    require "Cocos2d"require "Cocos2dConstants"local testscene = class("testsce ...

  6. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  7. iPhone开发与cocos2d 经验谈

    转CSDN jilongliang : 首先,对于一个完全没有mac开发经验,甚至从没摸过苹果系统的开发人员来说,首先就是要熟悉apple的那一套开发框架(含开发环境IDE.开发框架uikit,还有开 ...

  8. cocos2d学习记录

    视频 - http://www.manew.com/forum-105-3.html一个论坛帖 - http://www.zhihu.com/question/21114802官网 - http:// ...

  9. Android下Cocos2d创建HelloWorld工程

    最近在搭建Cocos2d的环境,结果各种问题,两人弄了一天才能搞好一个环境-! -_-!! 避免大家也可能会遇到我这种情况,所以写一个随笔,让大家也了解下如何搭建吧- 1.环境安装准备 下载 tadp ...

  10. 学生信息管理系统(cocos2d引擎)——数据结构课程设计

    老师手把手教了两天半,看了一下模式,加了几个功能就大功告成了!!! 给我的感想就是全都是指针! 添加图片精灵: CCSprite*  spBG = CCSprite::create("&qu ...

随机推荐

  1. ISO14443-4块传输的实现(卡)

    贴上自己的代码,目前测试通过,但我感觉结构不是很好,希望和大家交流共同提高. .H文件 #define ACKN -1 #define ACKY -2 #define RESEND -3 #defin ...

  2. 如何修正Feedly文章中文標題亂碼或無法正常顯示的問題

    在7月1日Google關閉Reader之前,我想應該有許多人都已經從Google Reader移到其他服務上了,其中受益最大的者莫過於Feedly了,一下子就吸收了幾百萬的用戶,而我也是其中之一,由於 ...

  3. iPhone之为UIView设置阴影(CALayer的shadowColor,shadowOffset,shadowOpacity,shadowRadius,shadowPath属性)

    效果图: 以下代码实现: 第一个图片的代码 //加阴影--任海丽编辑 _imageView.layer.shadowColor = [UIColor blackColor].CGColor;//sha ...

  4. win7配置iis 出现:HTTP 错误 403.14 - Forbidden

    打开 IIS 管理器. 在“功能”视图中,双击“目录浏览”. 在“目录浏览”页上,在“操作”窗格中单击“启用”. 确认站点或应用程序配置文件中的 configuration/system.webSer ...

  5. “/”应用程序中的服务器错误。 / c:\windows\temp目录权限设置

    说明: 1 对该目录的权限是ASP.net生成编译运行的临时文件需要,ASP不需要这个目录是因为ASP的脚本代码是解释执行. 2 Windows2003默认的设置是可以正常运行ASP.net的,造成问 ...

  6. DateTime用法

    //今天 DateTime.Now.Date.ToShortDateString(); //昨天,也就是今天的日期减一 DateTime.Now.AddDays(-1).ToShortDateStri ...

  7. HDOJ 1098 Ignatius's puzzle

    Problem Description Ignatius is poor at math,he falls across a puzzle problem,so he has no choice bu ...

  8. Spreadsheet Calculator 电子表格计算器 (Uva 215)

    原题:https://uva.onlinejudge.org/external/2/215.pdf 有一个M x N的表格,每个单元格是个数字或者表达式.表达式由单元格编号和+ - 号组成 输出单元格 ...

  9. MVC中各类文件

    sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息. .csproj:项目文件,创建应用程序所需的引用.数据连接.文件夹和文件的信息. .aspx:Web 窗体页由两部分组 ...

  10. 【Python排序搜索基本算法】之Prim算法

    Prim算法是实现最简单的最小生成树(MST)算法,适合于稠密图.要实现Prim算法,我们主要关注的是增量的变化,也就是从每个非树顶点到树顶点的最短距离,使得最后生成一棵包括所有顶点的树,并且这棵树的 ...