无题
导读: jsb是什么,有什么作用
jsb是JavaScript和c++的桥梁,cocos creator 的js层面和native层面的沟通 靠的就是jsb。
1:首先在引擎初始化的时候会创建一个js的运行环境,引擎持有其上下文,保留在ScriptEngine类中,ScriptEngine为单例。
具体代码
![](https://img.haomeiwen.com/i7425751/1c452be129ab24a3.png)
2:注册所有需要的jsb jsb_register_all_modules();
jsb_register_all_modules.cpp文件中罗列了非常多需要注册的jsb,我们挑选其中一个来具体分析。
![](https://img.haomeiwen.com/i7425751/26bba9ba15c4cab1.png)
obj为步骤1中创建的_globalObj,图中代码大概意思为,设置一个名字为"jsb"的 js obj到_globalObj中,持有这个js obj(nsval)传递给js_register_video_VideoPlayer()方法中。
![](https://img.haomeiwen.com/i7425751/ea4b68e6372b5455.png)
se::Class用于暴露 C++ 类到 JS 中,它会在 JS 中创建一个对应名称的构造函数。
defineFunction绑定一个名字为xxx的js方法到这个对象上。
cls->install();把cls注册到虚拟机中。
JSBClassType::registerClass<cocos2d::VideoPlayer>(cls);绑定VideoPlayer类和cls。
3: js初始化刚才绑定的对象
例子
let video = new jsb.VideoPlayer();
video.setFrame(0,0,100,100);
就会调用到我们之前绑定的js_video_VideoPlayer_setFrame方法里面
![](https://img.haomeiwen.com/i7425751/a62e05152891fc86.png)
se::State 中包含初始化这个对象的时候,绑定的c++对象的指针。
static bool js_video_VideoPlayer_constructor(se::State& s) //初始化方法
{
cocos2d::VideoPlayer* cobj =new(std::nothrow)cocos2d::VideoPlayer();
s.thisObject()->setPrivateData(cobj);
return true;
}
seval_to_xxx为封装的一些列工具方法,用于类型转换
网友评论