Cocos2d-x從入門到精通第12課《layer的創建與使用》

一.Layer的概念

Layer,即層。在Cocos2d-x官網上,Layer是這樣定義的:

 

//添加子節點到layer

addChild(Node child )  

//添加子節點到layer,並設置它的顯示等級

addChild(Node child,int zOrder )  

//添加子節點到layer上,並設置他的顯示等級和標籤

addChild(Node *child, int zOrder, int tag )

其中,Child參數就是節點。對於場景而言,通常我們添加的節點就是層。先添加的層會被置於後添加的層之下。如果需要爲它們指定先後次序,可以使用不同的zOrder值。tag是元素的標識號碼,如果爲子節點設置了tag值,就可以在它的父節點中利用tag值就可以找到它了。層可以包含任何Node作爲子節點,包括Sprites(精靈), Labels(標籤),甚至其他的Layer對象。

 

 

   官網給出的解釋很多,很全面,這裏給大家總結一下大概意思是:layer是node的子類,用來顯示sprite,文本等其他遊戲元素,並可以對這些元素在layer上進行操作,如改變他的位置,大小等。另外layer還有一個重要的功能就是用來響應用戶的輸入操作,例如:觸摸操作,輸入操作,和加速度計。

 

看了我的總結是不是有點明白Layer是個什麼東東了呢。下面我們通過代碼來講解Layer的創建和使用。

 

二.Layer的創建

創建Layer兩種方法,第一種就是直接創建,代碼如下:

 

 

我們通過代碼以及註釋可以看出layer的創建是很簡單的。

 

下面我們來學習一下layer的第二種創建方法,也就是通過繼承Layer來實現Layer的創建。這兒需要創建一個C++的類,頭文件代碼如下:

 

 

源文件代碼如下:

 

從代碼我們可以看出,這種創建方式首先需要去創建一個C++的類LayerTest,並讓它繼承Layer,這樣LayerTest就是Layer的子類了,也就是說它繼承了Layer的方法和相關屬性,在項目開發中就可以把它當做一個Layer來使用。在實際開發中,我們經常用到的layer的創建方法就是這種方法,因爲這樣的創建方法使用起來更靈活,且更容易實現項目開發的模塊化,例如我們想在我們的遊戲中開發一個“簽到面板模塊”,就可以通過繼承Layer的方法來創建一個自定義的Layer,並在創建出來的Layer上添加需要的遊戲元素,進而完成“簽到面板模塊”所需的業務邏輯和顯示效果。

三.Layer的層級關係

Layer的層級關係是本節課的重點,也是難點。所謂Layer的層級關係,指的是layer的遮擋關係,也就是說Layer與Layer之間是有遮擋關係的,而遮擋關係的優先級是通過設置Layer的Zorder來實現的,Zorder值越大的layer,層級也就越高。如果有兩個Layer,layer1,layer2,layer1的Zorder的值爲1,layer2的ZOrder的值爲2,如果layer1和layer2在同一場景且他們有項目重合的部分,那麼layer2將會遮擋住layer1的部分顯示。下面我們就通過第二個知識點創建的兩個Layer,來做一下演示。代碼如下:

 

 

    從代碼中我們可以看出,我在HelloWorld類的init方法中創建了兩個layer,第一個是通過直接創建的方法創建的Layer,第二種就是通過我們剛纔創建的LayerTest類來創建的一個Layer,並把着兩個layer都添加到了HelloWorld中。

    我們來運行一下我們的項目,可以看到下圖:

 

圖中,上面顯示“老師給學生講課”的圖片就是我們的layerTest上的srpite貼圖,下面顯示“火雲開發課堂”的圖片就是我們layer1上面的sprite的顯示貼圖。我們可以看到layerTest遮擋住了layer1,也就是說layer1的層級關係是低於layerTest的,你可能會疑問,我們並沒有設置它們的Zorder,爲什麼layerTest的層級就高於layer1呢,這兒我們不得不說一下,造成這個的原因就是因爲cocos的渲染機制會把最後添加的節點放到圖層的最上面進行渲染,從代碼中可以看到我們是先添加的layer1後面才添加的layerTest。所以cocos會把layerTest渲染到layer1上面,也就造成了layerTest遮擋住了layer1。

 

那麼我們想要layer1遮擋住layerTest該如何做呢。這個其實也很簡單,就是把我們的layer1的有層級設置高就可以了,我們通過代碼:

把layer1的Zorder設置成2,然後運行項目,可以看到如下圖:


    從圖中的標註我們可以看到layer1遮擋住了layerTest,左邊標註的紅色矩形框捏就是被遮擋住的部分,右邊寫有“2”的部分就是未被遮擋住的部分。我們通過設置layer1的Zorder改變了兩個層之間的層級關係,這個在我們以後的實際開發中也會被經常用到。

 

四.Layer(一)的總結

Layer在我們實際開發中會被經常用到,Layer會被作爲sprite,label,menu等節點的容器來使用,而且這些節點只用通過addChild添加到Layer中才能被渲染顯示出來。並且我們可以通過更改Layer的層級關係,也就是更改Layer的Zorder來改變不同層之間的遮擋關係。下節課我們會降到Layer的另外一個重要的功能,就是:Layer如何用來接收用戶的輸入事件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章