cocos2d-html5 打包后JSB不支持的方法汇总

http://blog.163.com/mqsy_yj/blog/static/2940499220131011101730101/

用cocos2d-html5开发游戏确实很方便,但在web browser 下运行与打包成app发布到移动设备上运行却是两码事。
相信大家和我一样,遇到过打包后运行app报 cc.pToAngle is not a function。原因是JSB没有绑定相关方法的实现。
JSB绑定文件在cocos2d-x/scripting/javascript/bindings目录下,在cocos2d_specifics.cpp的3548行开始都是cc.p相关的一些方法,我可以看到确实没有对pToAngle、pForAngle等方法进行绑定,所以会报错。当然这些方法的实现是很简单的,估计官方也是因为这样才不屑于写吧。
有简单且一劳永逸的方法,在cocos2d-html5/cocos2d/support目录下复制CCPointExtension.js到自己的项目目录中就可以了,用法没有任何的改变。
但是也有像cc.RADIANS_TO_DEGREES这样的方法在 CCPointExtension.js并没有实现,还是需要在自己的js项目里在不同的空间名下实现同名的方法。下面就把这些方法的实现列出来以供参考。
    
    
    
    
cc . pToAngle :
YJ . pToAngle  =   function ( point ){
         return   Math . atan2 ( point . y ,  point . x );
     };
cc . pForAngle :
YJ . pForAngle  =   function ( angle ){
         return  cc . p ( Math . cos ( angle ), Math . sin ( angle ));
     };
cc . RADIANS_TO_DEGREES :
YJ . RADIANS_TO_DEGREES  =   function ( angle ){
         return  angle  *   180   /   Math . PI ;
     };
cc . DEGREES_TO_RADIANS :
YJ . DEGREES_TO_RADIANS  =   function ( angle ){
         return  angle  /   180   *   Math . PI ;
     };
cc . Sequence . create ():
这个方法在 JSB 中是不支持传出一个数组[]作为参数的,但在绝大多数情况下,我们也不知道会有多少 action ,所以也不能将参数一个一个的写进去,像这样: cc . Sequence . create ( a1 , a2 , a3 ,...)。如果试图通过回调函数来实现迭代执行,不防试试,反正我是没有成功,而且遇到很多莫名其妙的总是。不过在 JSB 中是支持传入 arguments 的,所以我们换个写法就能轻松搞定了,奇迹就在下面:
cc . Sequence . create . apply ( null , actArray );
cc . Spawn . create ():
这个方法与 cc . Sequence 有相同的问题,解决方法也类似:
cc . Spawn . create . apply ( cc . Spawn , actArray );
还有一些无法解决的问题也列出来。

1.cc.LoaderScene.getInstance()不支持,但提供了cc.Loader.preload(),该方法返回cc.Loader唯一实例

cc.Loader.preloadJSB中无效,具体情况请移步:cocos2d-html5 关于JSB中资源的预加载

2.cc.LabelTTF.extend()不支持,即无法继承cc.LabelTTF,如果要二次开发,只能自己写个封装类

3.cc.SpriteBatchNode也没有提供extend支持,所以也需要自己封装一下来做二次开发用

你可能感兴趣的:(cocos2d-html5 打包后JSB不支持的方法汇总)