cocos2dx tag和zorder

来源:互联网 发布:四川省卫生数据采集 编辑:程序博客网 时间:2024/06/15 21:27

当一个渲染对象加入到两外一个渲染对象中时,可以有两个可选参数,一个时tag,一个是order


    virtual void addChild(CCNode * child);

    virtual void addChild(CCNode * child, int zOrder);

    virtual void addChild(CCNode* child, int zOrder, int tag);


当使用addChild,不带zOrder和tag时,那么使用子对象保存的zorder和tag,而这两个值在对象创建时,

zOrder是0,tag是-1


tag用于标记这个渲染对象,就像每个人都有身份证一样。

如果我们在某个函数中把对象加入到父节点,而在另外一个函数中又要用到这个节点,我们必须在这两个函数外定义该节点,这样代码显得很难看。代码如下:


void MyScene::init()

{

CCSprite* sp = CCSprite::create();

addChild(sp);

}


void MyScene::handle()

{

// 怎么得到sp指针呢,它再另外一个函数中创建的

        // c++中至少有两种办法,第一成员变量,定义全局变量,但是这种变量很多,写起来很辛苦,并且代码会很难看

}

///////////////////////////改进后如下:////////////////

void MyScene::init()

{

CCSprite* sp = CCSprite::create();

addChild(sp, 0, 30);

}


void MyScene::handle()

{

CCSprite* sp = (CCSprite*)getChildByTag(30);

// 对sp做别的处理。。。。

}


///////////////////嗯,人的身份证是不能重复的,但是tag不小心重复了怎么办?

cocos2dx不负责管理tag的唯一性,你得自己小心,如果一旦重复了,会导致你获取child得时候,可能不正确。


////////tag和身份证不一样得是,tag是能修改的

sp->setTag(...)可以修改,所以就算tag重复了,也可以修改的


-----------------------------下面说zOrder

ZOrder是子对象的Z轴方向的值,负责管理对象的覆盖关系。

ZOrder越大,那么越靠近用户。

如果ZOrder相同,那就看加入顺序,越后面加入的对象,越靠近用户。




0 0