recorderChild()函数在什么时候调用,为什么不用SetZorder()

来源:互联网 发布:淘宝便宜55寸彩电价格 编辑:程序博客网 时间:2024/05/22 02:03

一、了解recorderchild()

recorderChild函数功能主要是:改变Z轴顺序并改变遮挡关系。

SpriteZOrder::SpriteZOrder(){    m_dir = 1;                CCSize s = CCDirector::sharedDirector()->getWinSize();        float step = s.width/11;    for(int i=0;i<5;i++)     {        CCSprite* sprite = CCSprite::create("Images/grossini_dance_atlas.png", CCRectMake(85*0, 121*1, 85, 121));        sprite->setPosition( ccp( (i+1)*step, s.height/2) );        addChild(sprite, i);    }        for(int i=5;i<10;i++)     {        CCSprite* sprite = CCSprite::create("Images/grossini_dance_atlas.png", CCRectMake(85*1, 121*0, 85, 121));        sprite->setPosition( ccp( (i+1)*step, s.height/2) );        addChild(sprite, 14-i);    }        CCSprite* sprite = CCSprite::create("Images/grossini_dance_atlas.png", CCRectMake(85*3, 121*0, 85, 121));    addChild(sprite, -1, kTagSprite1);    sprite->setPosition( ccp(s.width/2, s.height/2 - 20) );    sprite->setScaleX( 6 );    sprite->setColor(ccRED);        schedule( schedule_selector(SpriteZOrder::reorderSprite), 1);        }void SpriteZOrder::reorderSprite(float dt){    CCSprite* sprite = (CCSprite*)(getChildByTag(kTagSprite1));        int z = sprite->getZOrder();        if( z < -1 )        m_dir = 1;    if( z > 10 )        m_dir = -1;        z += m_dir * 3;        reorderChild(sprite, z);    }


       上面代码通过getZOrder()获得目前的z轴值,然后改变后父节点调用recorderchild函数,第一个参数是精灵对象,第二个参数是设置的z轴值。

 

二、为什么不直接使用sprite->SetZorder(z)

 

这个是CCNode类的代码,打开后发现,其实setZorder函数本身的实现就是调用reorderchild()函数;

为什么不直接调用看第二张图就行了,该函数是私有的private()

 

0 0