引用cocos creator 讲解jsb如何生效

                                                   无题

导读: jsb是什么,有什么作用

jsb是JavaScript和c++的桥梁,cocos creator 的js层面和native层面的沟通 靠的就是jsb。

1:首先在引擎初始化的时候会创建一个js的运行环境,引擎持有其上下文,保留在ScriptEngine类中,ScriptEngine为单例。

具体代码


2:注册所有需要的jsb    jsb_register_all_modules();

jsb_register_all_modules.cpp文件中罗列了非常多需要注册的jsb,我们挑选其中一个来具体分析。


obj为步骤1中创建的_globalObj,图中代码大概意思为,设置一个名字为"jsb"的 js obj到_globalObj中,持有这个js obj(nsval)传递给js_register_video_VideoPlayer()方法中。


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方法里面


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为封装的一些列工具方法,用于类型转换 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。