Cocos2d-x   发布时间:2022-05-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Cocos2dx-jsb 3.x 精灵构建过程浅析(2):大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Cocos2dx-jsb 3.x 精灵构建过程浅析(2):

1、上一篇我们分析了直接创建精灵类的情况,那如果我们继承呢?

var MySprite = cc.Sprite.extend({
ctor:function(filename){
this._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._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):所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: