Cocos2dx-jsb 3.x 精灵构建过程浅析(2):
Cocos2dx-jsb 3.x 精灵构建过程浅析(2): 1、上一篇我们分析了直接创建精灵类的情况,那如果我们继承呢? var MySprite = cc.Sprite.extend({ 使用上面的扩展精灵类创建一个精灵,那这样的调用过程又是怎样的呢?: // add"HelloWorld" splash screen" 2、 new MySprite(res.HelloWorld_png)执行这个语句时,会先调用扩展类的ctor函数, 在ctor函数中,我们又调用了this._super(filename);方法,这个方法调用父类的Sprite类 中的ctor方法,Sprite类中的方法在C++ 端, static booljs_cocos2d_Sprite_ctor(JSContext *cx,uint32_t argc,jsval *vp) { JS::CallArgs args = JS::CallArgsFromVp(argc,vp); JS::RootedObject obj(cx,args.thisv().toObjectOrNull()); cocos2d::Sprite *nobj = new (std::nothrow) cocos2d::Sprite(); if (nobj) { nobj->autorelease(); } js_proxy_t* p = jsb_new_proxy(nobj,obj); AddNamedObjectRoot(cx,&p->obj,"cocos2d::Sprite"); bool isFound = false; //这里还是会调用_ctor方法,这样就和上面一篇分析的一样了,调用initXXX方法。 if (JS_HasProperty(cx,obj,"_ctor",&isFound) && isFound) ScriptingCore::getInstance()->executeFunctionWithOwner(OBJECT_TO_JSVAL(obj),args); args.rval().setUndefined(); return true; } 总结:我们扩展了之后,就不再调用C++端的bool js_cocos2dx_Sprite_constructor(JSContext *cx,jsval *vp)方法了,就这么多区别。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |