JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改

什么是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相同。

下载好的软件包解压后。在软件目录下执行

1
python setup.py install
如果是mac下,在命令前面在sudo即可。

详细信息大家可以查看官网的教程(地址)

(2)运行genbindings.py

搭建好环境后,打开命令行,进入目录cocos2d-js/tools/tojs 。输入命令

1
python genbindings.py
自动绑定成功以后可以看到下图所示

20150521210554473.jpg

绑定后的生成的代码在目录

cocos2d-js/frameworks/js-bindings/bindings/auto

至于为什么是生成这些代码,大家可以看genbindings.py中的代码。这里就不详细说明了

2、手动生成脚本(本文不做讲解)

怎么进行自动生成的脚本绑定规则修改

自动绑定规则的约束主要是在这个目录下tools/bindings-generator/targets/spidermonkey。

我们先来看conversions.yaml,这个是关于绑定代码的配置文件。

1、类型转换

20150521211842536.jpg

根据上图可以看到。在自动绑定中会将c++的float类型转换成double类型,因为float类型没有办法生成绑定。short类型转换成int32_t

2、命名空间转换

20150521212053405.jpg

将c++代码中带有左边命名空间的,在js中定义为右边的命名空间。

3、将JS传过来的脚本变量转换为c++变量

20150521212332451.jpg

比如传过来的js变量需要转换成是int型,就用右边的代码来转换。

4、将JS传过来的脚本对象转换成c++对象

20150521212601552.jpg

js传递过来的对象类型需要跟c++对象进行映射。如果要增加对于对象为空值得处理判定,就可以在这里增加。

5、将c++的变量转换成js变量

20150521212946602.jpg

比如int对象需要转换成js变量那么用的就是int32_to_jsval。

6、将c++的对象转换成js对象

20150521213139219.jpg

看上图就对比代码就可以看出。c++转换成js对象的函数就通过这几个步骤

js_get_or_create_proxy
OBJECT_TO_JSVAL
以上就是所有的转换基础规则,然后在根据一些模板,就完成了自动绑定代码的生产。

templates目录下则是一对生成代码的模板

20150521211533483.jpg

有构造函数的模板,重载函数的模板等等,具体大家可以看里面的代码写法。

时间: 2024-10-13 15:39:03

JavaScript强化教程 —— Cocos2d-JS自动JSB绑定规则修改的相关文章

JavaScript强化教程——Native.js示例汇总

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 -- Native.js示例汇总 Native.js虽然强大和开放,但很多web开发者因为不熟悉原生API而难以独立完成. 这篇帖子的目的就是汇总各种写好的NJS代码,方便web开发者. 众人拾柴火焰高,有能力的开发者多多提交NJS代码,大家都会给你点赞的, Android平台 在桌面创建和删除App快捷方式 见Hello H5+里Native.js部分演示及源码. 或在这里搜索"快捷方式",h

JavaScript强化教程-JS面向对象编程

本文为H5EDU机构官方HTML5培训教程,主要介绍:JavaScript强化教程--JS面向对象编程  对事物的抽象描述  描述这类事物的特征和行为  对象是类的实例代码实现:创建一个类  function peple(){        this.hp=0;         this.act = 30;         this.name = "";         this.x=0;         this.y=0;         this.move =function(x,

JavaScript强化教程——AngularJS

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 —— AngularJS AngularJS 简介 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML. AngularJS 是一个 JavaScript 框架 AngularJS 是一个 JavaScript 框架.它是一个以 JavaScript 编写

JavaScript强化教程——cocosjs屏幕适配方案

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 ——cocosjs屏幕适配方案 首 先说点题外话,对于任何大型项目来说,coding的规范重要,在cocos2dx-jsbinding这个框架中,javascript是一个绝对核心 的脚本语言,99%的游戏逻辑都由js完成.脚本的编写量绝对大于大多数的web项目,掌握javascript的扎实的基础至关重要. 入 正题,今天讨论的是如何使用jsb来处理移动平台的多分辨率适配问题.就目前的移动平台来讲,分辨

JavaScript强化教程——JQuery初级教程

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 --JQuery初级教程 第一步 下载jquery首先需要在jquery官网下载 jquery-3.0.0.js(版本和当前最新版本一致)放到自己的文件夹中第二部 引用jquery <script src="jquery-3.0.0.js"></script> 第三部 使用jquery语法写一个简单地程序 <!DOCTYPE html> <html la

JavaScript强化教程——AngularJS 指令

本文为 H5EDU 机构官方 HTML5培训 AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 通过内置的指令来为应用添加功能. AngularJS 允许你自定义指令. AngularJS 指令 AngularJS 指令是扩展的 HTML 属性,带有前缀 ng-. ng-app 指令初始化一个 AngularJS 应用程序. ng-init 指令初始化应用程序数据. ng-model 指令把元素值(比如输入域的值)绑定到应用程序. 完整的指令内容可以参阅 An

JavaScript强化教程——jQuery选择器

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程 -- jQuery选择器 jQuery 选择器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 .class $(".intro") 所有 class="intro" 的元素 element $("p") 所有 <p&

JavaScript强化教程——对象的值传递和引用传递

本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:JavaScript强化教程--对象的值传递和引用传递 function SetName(obj){  obj.name="Tom";//执行之前,此时的obj和Person的name属性均为undefined  obj1=new Object();  obj1=obj;//声明一个全局对象,那么obj.obj1和Person此时应该是同一个对象  }//SetName函数执行完之后,obj对象销毁,其余对象仍然存在  Pe

JavaScript强化教程 —— Cocos2d-JS的屏幕适配方案

1. 设置屏幕适配策略(Resolution Policy) 如果你还没有用过Resolution Policy,只需要在游戏载入过程完成之后(cc.game.onStart函数回调中),调用下面的代码: cc.view.setDesignResolutionSize(320, 480, cc.ResolutionPolicy.SHOW_ALL); setDesignResolutionSize函数的前两个参数是你想要在你的代码中使用的游戏分辨率,第三个参数就是你选择的适配方案.引擎中内置了5种