Cocos2d-JS自动JSB绑定规则修改
2015-07-27 15:33
519 查看
什么是JSB
JSB是javascript binding的简称。Cocos2d-JS中使用的javascript引擎是Mozilla 的spidermonkey,而JSB绑定的目的就是让javascript脚本能够调用到c++代码,c++代码能够调用到javascript脚本。
怎么生成JSB绑定
1、自动生成脚本
在Cocosd-JS引擎目录下的tools/tojs目录下有官方用于生成自动版本的脚本。我们可以从这里入手来学习。
(1)搭建环境
需要安装以下三个软件
python 2.7.x(下载地址):目前引擎里面的bindings-generator只支持python2.7.x版本
py-ymal(下载地址):这是python的一个第三方包,下载页有不同系统的安装方式,可以参考generator.py会调用到这个包。
cheetah(下载地址):这也是python的一个第三方包,一个模板,generator.py会调用到这个包,安装方式跟py-ymal相同。
下载好的软件包解压后。在软件目录下执行
如果是mac下,在命令前面在sudo即可。
详细信息大家可以查看官网的教程(地址)
(2)运行genbindings.py
搭建好环境后,打开命令行,进入目录cocos2d-js/tools/tojs 。输入命令
自动绑定成功以后可以看到下图所示
绑定后的生成的代码在目录
cocos2d-js/frameworks/js-bindings/bindings/auto
至于为什么是生成这些代码,大家可以看genbindings.py中的代码。这里就不详细说明了
2、手动生成脚本(本文不做讲解)
怎么进行自动生成的脚本绑定规则修改
自动绑定规则的约束主要是在这个目录下tools/bindings-generator/targets/spidermonkey。
我们先来看conversions.yaml,这个是关于绑定代码的配置文件。
1、类型转换
根据上图可以看到。在自动绑定中会将c++的float类型转换成double类型,因为float类型没有办法生成绑定。short类型转换成int32_t
2、命名空间转换
将c++代码中带有左边命名空间的,在js中定义为右边的命名空间。
3、将JS传过来的脚本变量转换为c++变量
比如传过来的js变量需要转换成是int型,就用右边的代码来转换。
4、将JS传过来的脚本对象转换成c++对象
js传递过来的对象类型需要跟c++对象进行映射。如果要增加对于对象为空值得处理判定,就可以在这里增加。
5、将c++的变量转换成js变量
比如int对象需要转换成js变量那么用的就是int32_to_jsval。
6、将c++的对象转换成js对象
看上图就对比代码就可以看出。c++转换成js对象的函数就通过这几个步骤
以上就是所有的转换基础规则,然后在根据一些模板,就完成了自动绑定代码的生产。
templates目录下则是一对生成代码的模板
有构造函数的模板,重载函数的模板等等,具体大家可以看里面的代码写法。
源引:http://cn.cocos2d-x.org/tutorial/show?id=2897
JSB是javascript binding的简称。Cocos2d-JS中使用的javascript引擎是Mozilla 的spidermonkey,而JSB绑定的目的就是让javascript脚本能够调用到c++代码,c++代码能够调用到javascript脚本。
怎么生成JSB绑定
1、自动生成脚本
在Cocosd-JS引擎目录下的tools/tojs目录下有官方用于生成自动版本的脚本。我们可以从这里入手来学习。
(1)搭建环境
需要安装以下三个软件
python 2.7.x(下载地址):目前引擎里面的bindings-generator只支持python2.7.x版本
py-ymal(下载地址):这是python的一个第三方包,下载页有不同系统的安装方式,可以参考generator.py会调用到这个包。
cheetah(下载地址):这也是python的一个第三方包,一个模板,generator.py会调用到这个包,安装方式跟py-ymal相同。
下载好的软件包解压后。在软件目录下执行
详细信息大家可以查看官网的教程(地址)
(2)运行genbindings.py
搭建好环境后,打开命令行,进入目录cocos2d-js/tools/tojs 。输入命令
绑定后的生成的代码在目录
cocos2d-js/frameworks/js-bindings/bindings/auto
至于为什么是生成这些代码,大家可以看genbindings.py中的代码。这里就不详细说明了
2、手动生成脚本(本文不做讲解)
怎么进行自动生成的脚本绑定规则修改
自动绑定规则的约束主要是在这个目录下tools/bindings-generator/targets/spidermonkey。
我们先来看conversions.yaml,这个是关于绑定代码的配置文件。
1、类型转换
根据上图可以看到。在自动绑定中会将c++的float类型转换成double类型,因为float类型没有办法生成绑定。short类型转换成int32_t
2、命名空间转换
将c++代码中带有左边命名空间的,在js中定义为右边的命名空间。
3、将JS传过来的脚本变量转换为c++变量
比如传过来的js变量需要转换成是int型,就用右边的代码来转换。
4、将JS传过来的脚本对象转换成c++对象
js传递过来的对象类型需要跟c++对象进行映射。如果要增加对于对象为空值得处理判定,就可以在这里增加。
5、将c++的变量转换成js变量
比如int对象需要转换成js变量那么用的就是int32_to_jsval。
6、将c++的对象转换成js对象
看上图就对比代码就可以看出。c++转换成js对象的函数就通过这几个步骤
templates目录下则是一对生成代码的模板
有构造函数的模板,重载函数的模板等等,具体大家可以看里面的代码写法。
源引:http://cn.cocos2d-x.org/tutorial/show?id=2897
相关文章推荐
- cocos2d js-3.2 PageView的简单使用
- 【Cocos2d-js官方文档】八、cc.game
- cocos2dx3.1从零学习(二)菜单、场景切换、场景传值
- Cocos2d-x 3.3中MoveTo和MoveBy用法
- Cocos2d-js 3.x 动作
- cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()
- XCode5添加新建类模板(Cocos2dx Template Class for Scene or Layer)
- Cocos2d-x中,如何通过触摸来移动一个精灵
- cocos2dx中的内存管理机制
- cocos2dx中的事件分发机制
- cocos2dx中的屏幕适配
- Cocos2d-x中createEdgeBox()的各项参数的含义
- 实例:Cocos2d-js中使用纹理对象创建Sprite对象
- Cocos2d-x :什么是锚点?(简单点说:锚点就是图片的原点)
- Cocos2d-X中间应用
- cocos2d-x 2.2 在WINDOWS中如何创建项目
- 9秒学院Cocos2d-x基础分析学习
- cocos2dx的那些坑
- cocos ide win32 调试问题
- Cocos2d-x《雷电大战》(1)-双层地图无限滚动