ZORDER:是描述渲染順序的值,每個CCNode都有ZORDER,默認是0
ZORDER越大,越後面繪製
如果ZORDER相同,那麼看arrival順序,先加入的節點先繪製
ZORDER只在相同父節點的節點之間進行比較
先從一段簡單的代碼看起:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//在層上設置屬性 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 ; } |
上面的代碼我是再熟悉不過了,上面的代碼實現了,在層中創建了兩個精靈,而且兩個精靈的位置一樣,那麼在程序中就會出現這樣一個問題,到底哪個精靈先顯示呢?
爲了解決這個問題,先看一下上面代碼的渲染模型
根據上面的模型可知Layer是CCNode,Sprite1和Sprite2爲CCNode的兩個子節點,從而可知Sprite1和Sprite2的ZORDER都爲0,而後添加的會後繪製,所以後顯示後面的精靈
執行結果:
修改ZORDER的值:
方法1、通過修改addChild函數的第二個參數實現修改ZORDER的值
將上面的代碼中的
1
2
3
|
//創建精靈 CCSprite* sprite1 = CCSprite::create( "CloseNormal.png" ); addChild(sprite1); |
改成
1
2
3
|
//創建精靈 CCSprite* sprite1 = CCSprite::create( "CloseNormal.png" ); addChild(sprite1,
1 ); |
執行結果:
方法2、通過使用setZOrder函數設置ZORDER的值
在代碼中添加
1
2
|
//使用函數設置ZORDER sprite1->setZOrder( 1 ); |
執行結果:
Tag, 是一個節點的身份證,方便通過getChildByTag來獲取節對象
它的意義在於減少成員變量
Tag只在相同父節點的節點之間有效
Tag在相同父節點的兒子之間不能相同,Tag相同情況下,cocos不報錯,getChildByTag可能會獲取到不是你想要的CCNode
一般用枚舉表示Tag以防止重複
TAG有時候用來當ID使用,尤其是當多個菜單項使用同一個響應函數時候