博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2dx-jsb 3.x 精灵构建过程浅析(2):
阅读量:4216 次
发布时间:2019-05-26

本文共 1324 字,大约阅读时间需要 4 分钟。

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),"_ctor", args);

    args.rval().setUndefined();

    return true;

}

总结:我们扩展了之后,就不再调用C++端的bool js_cocos2dx_Sprite_constructor(JSContext *cx,uint32_t argc, jsval *vp)方法了,就这么多区别。

参考:

 

 

转载地址:http://fesmi.baihongyu.com/

你可能感兴趣的文章
我的2020
查看>>
idea快捷键使用
查看>>
2.1MAC协议概述
查看>>
2.3 WSN的MAC协议
查看>>
图解后缀表达式的计算过程
查看>>
栈与队列的应用——计算表达式的值
查看>>
静态链表——sharing
查看>>
静态链表——sorting
查看>>
DFS——背包问题
查看>>
DFS——选数问题
查看>>
BFS——求矩阵中“块”的个数
查看>>
BFS——走迷宫的最小步数
查看>>
并查集——好朋友
查看>>
关键路径
查看>>
DP——数塔问题
查看>>
C/C++学习笔记——C提高:指针强化
查看>>
C/C++学习笔记——C提高:指针的指针(二级指针)
查看>>
C/C++学习笔记——C提高:位运算
查看>>
C/C++学习笔记——C提高:多维数组
查看>>
C/C++学习笔记——C提高: 结构体
查看>>