Cocos2dx-Jsb 3.x 精灵构建过程浅析(2):
1、上一篇我们分析了直接创建精灵类的情况,那如果我们继承呢?
var @H_403_14@MySprite = @H_403_14@cc.@H_403_14@Sprite.@H_403_14@extend({
ctor:function(filename){
this.@H_403_14@_super(filename);
}
});
使用上面的扩展精灵类创建一个精灵,那这样的调用过程又是怎样的呢?:
// add"HelloWorld" splash screen"
//this.sprite = new cc.Sprite(res.HelloWorld_png);
this.sprite = new MySprite(res.HelloWorld_png);
this.sprite.attr({
x: size.wIDth / 2,
y: size.height / 2,
scale: 0.5,
rotation: 180
});
this.addChild(this.sprite,0);
2、
new MySprite(res.HelloWorld_png)执行这个语句时,会先调用扩展类的ctor函数,
在ctor函数中,我们又调用了this.@H_403_14@_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)方法了,就这么多区别。
参考:http://www.cocos2d-x.org/docs/manual/framework/html5/v3/inheritance/zh
以上是内存溢出为你收集整理的Cocos2dx-jsb 3.x 精灵构建过程浅析(2):全部内容,希望文章能够帮你解决Cocos2dx-jsb 3.x 精灵构建过程浅析(2):所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)