Cocos2d-X中的ZORDER和Tag

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使用,尤其是當多個菜單項使用同一個響應函數時候


轉自:Cocos2d-X中的ZORDER和Tag

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章