cocos2d-x(6):渲染顺序ZORDER和Tag相关学习


前人已经总结了:http://blog.csdn.net/u010105970/article/details/39753725

我稍微补充一点点。



setZOrder和setTag都是CCNode中的静态成员函数。

来自cocos2d-x  2.2.2








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

ZORDER越大,越后面绘制

如果ZORDER相同,那么看arrival顺序,先加入的节点先绘制

ZORDER只在相同父节点的节点之间进行比较

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

[cpp]  view plain  copy
  1. //在层上设置属性  
  2. bool Zorder::init()  
  3. {  
  4.     //初始化父类层  
  5.     CCLayer::init();  
  6.   
  7.     //得到窗口的尺寸  
  8.     CCSize winSize = CCDirector::sharedDirector()->getWinSize();  
  9.   
  10.     //创建精灵  
  11.     CCSprite* sprite1 = CCSprite::create("CloseNormal.png");  
  12.     addChild(sprite1);  
  13.   
  14.     //设置精灵的位置  
  15.     sprite1->setPosition(ccp(winSize.width/2, winSize.height/2));  
  16.   
  17.     CCSprite* sprite2 = CCSprite::create("HelloWorld.png");  
  18.     addChild(sprite2);  
  19.   
  20.     //设置精灵的位置  
  21.     sprite2->setPosition(ccp(winSize.width/2, winSize.height/2));  
  22.   
  23.     return true;  
  24. }  


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

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


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

执行结果:


修改ZORDER的值:

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

将上面的代码中的

[cpp]  view plain  copy
  1. //创建精灵  
  2.     CCSprite* sprite1 = CCSprite::create("CloseNormal.png");  
  3.     addChild(sprite1);  

改成

[cpp]  view plain  copy
  1. //创建精灵  
  2.     CCSprite* sprite1 = CCSprite::create("CloseNormal.png");  
  3.     addChild(sprite1, 1);  


执行结果:



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

在代码中添加

[cpp]  view plain  copy
  1. //使用函数设置ZORDER  
  2.    sprite1->setZOrder(1);  


执行结果:


Tag, 是一个节点的身份证,方便通过getChildByTag来获取节对象
  它的意义在于减少成员变量
  Tag只在相同父节点的节点之间有效
  Tag在相同父节点的儿子之间不能相同,Tag相同情况下,cocos不报错,getChildByTag可能会获取到不是你想要的CCNode
  一般用枚举表示Tag以防止重复

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



/*
sprite1->setTag(1);

CCSprite *sprite3 = (CCSprite *)getChildByTag(1);
sprite3->setZOrder(3);
*/






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值