ZORDER:是描写叙述渲染顺序的值,每一个CCNode都有ZORDER,默认是0

ZORDER越大,越后面绘制

假设ZORDER同样。那么看arrival顺序。先增加的节点先绘制

ZORDER仅仅在同样父节点的节点之间进行比較

先从一段简单的代码看起:

//在层上设置属性
bool Zorder::init()
{
//初始化父类层
CCLayer::init(); //得到窗体的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //创建精灵
CCSprite* sprite1 = CCSprite::create("CloseNormal.png");
addChild(sprite1); //设置精灵的位置
sprite1->setPosition(ccp(winSize.width/2, winSize.height/2)); CCSprite* sprite2 = CCSprite::create("HelloWorld.png");
addChild(sprite2); //设置精灵的位置
sprite2->setPosition(ccp(winSize.width/2, winSize.height/2)); return true;
}

上面的代码我是再熟悉只是了,上面的代码实现了。在层中创建了两个精灵。并且两个精灵的位置一样,那么在程序中就会出现这样一个问题。究竟哪个精灵先显示呢?

为了解决问题,先看一下上面代码的渲染模型

Cocos2d-X中的ZORDER和Tag-LMLPHP

依据上面的模型可知Layer是CCNode,Sprite1和Sprite2为CCNode的两个子节点,从而可知Sprite1和Sprite2的ZORDER都为0,而后加入的会后绘制。所以后显示后面的精灵

运行结果:

Cocos2d-X中的ZORDER和Tag-LMLPHP

改动ZORDER的值:

方法1、通过改动addChild函数的第二个參数实现改动ZORDER的值

将上面的代码中的

//创建精灵
CCSprite* sprite1 = CCSprite::create("CloseNormal.png");
addChild(sprite1);

改成

//创建精灵
CCSprite* sprite1 = CCSprite::create("CloseNormal.png");
addChild(sprite1, 1);

运行结果:

Cocos2d-X中的ZORDER和Tag-LMLPHP

方法2、通过使用setZOrder函数设置ZORDER的值

在代码中加入

 //使用函数设置ZORDER
sprite1->setZOrder(1);

运行结果:

Cocos2d-X中的ZORDER和Tag-LMLPHP

Tag, 是一个节点的身份证。方便通过getChildByTag来获取节对象

  它的意义在于降低成员变量

  Tag仅仅在同样父节点的节点之间有效

  Tag在同样父节点的儿子之间不能同样。Tag同样情况下。cocos不报错,getChildByTag可能会获取到不是你想要的CCNode

  一般用枚举表示Tag以防止反复

TAG有时候用来当ID使用。尤其是当多个菜单项使用同一个响应函数时候


05-25 21:51