ccscene是ccnode的子類,和ccnode一樣,也是一個抽象類。事實上,ccscene和ccnode幾乎完全相同,唯一差異在于ccscene的錨點位置預設在螢幕中心。如果打開模闆中ccscene.h檔案,大家會發現其中隻說明ccscene繼承自ccnode,并沒有任何其他内容。圖3-4是典型的遊戲場景跳轉示意圖。
目前版本的cocos2d中,ccscene類基本上沒有附加任何邏輯機制和特殊功能。通常建議将ccscene作為其他所有節點的父節點,看作cclayer(層)對象的一個容器。
需要說明的是,通常ccscene的子節點都直接繼承自cclayer,cclayer包含各個遊戲對象。因為大多數情況下場景對象本身不包含任何遊戲相關的代碼,而且很少被子類化,是以它一般在cclayer對象裡通過+(id)scene靜态方法來建立。
示例代碼如下:
此外,如果要實作各種動畫效果的場景切換,必須基于ccscene的場景切換。
3.3.1 cctransitionscene場景切換
cctransitionscene繼承自ccscene,而所有場景過渡效果的類都繼承自cctransitionscene。cctransitionscene的幾個基本方法如下。
(1)-(void)finish
該方法在過渡效果結束時調用。
(2)-(void)hideoutshowin
部分過渡效果會使用該方法來隐藏更外面的場景。
(3)-(id)initwithduration:(cctime)tscene:(ccscene *)s
該方法初始化一個場景過渡效果,并指定過渡時間和即将過渡的場景。
(4)+(id)transitionwithduration:(cctime)tscene:(ccscene *)s
該方法建立一個基本的場景過渡效果,并指定過渡時間和即将過渡的場景。
雖然過渡效果的名稱和需要的參數數量很多,但是添加場景間的過渡效果隻需要增加一行代碼而已。
以一個最簡單的淡入淡出過渡效果為例,場景在1秒内過渡到白色。這裡把第2章示例遊戲中用到的onrestartgame方法更改成如代碼清單3-6所示。
代碼清單3-6 onrestartgame更改
注意 cctransitionscene可以結合replacescene和pushscene使用,但不能将過渡效果和popscene一起使用。
3.3.2 cocos2d支援的場景過渡效果
cocos2d支援多種場景過渡效果,以下是目前可以使用的過渡效果及其描述。
(1)cctransitionfade
描述:場景在指定的時間内淡入淡出到一個指定的顔色。
(2)cctransitionfadetr
描述:從螢幕的左下角向上卷起瓦片(tiles),進而顯示場景。它還有3個變化:
cctransitionfadebl:從螢幕的右上角到左下角淡出場景的瓦片。
cctransitionfadeup:從螢幕的底部到頂部淡出場景的瓦片。
cctransitionfadedown:從螢幕的頂部到底部淡出場景的瓦片。
(3)cctransitionjumpzoom
描述:現有場景跳動着變小,新場景跳動着變大。
(4)cctransitionmoveinl
描述:舊的場景會移出,而新場景會從螢幕左側移入。它還有3個變化:
cctransitionmoveinb:新場景從螢幕的底部移入。
cctransitionmoveint:新場景從螢幕的上方移入。
cctransitionmoveinr:新場景從螢幕的右側移入。
(5)cctransitionsceneoriented
描述:将整個場景翻轉過來。該效果還有6個變化:
cctransitionflipx:場景橫向翻轉。
cctransitionflipy:場景縱向翻轉。
cctransitionflipangular:場景一半按橫向,一半按縱向翻轉。
cctransitionzoomflipangular:場景一半按橫向,一半按縱向翻轉,同時有一定縮放。
cctransitionzoomflipx:場景縱向翻轉,同時有一定縮放。
cctransitionzoomflipy:場景橫向翻轉,同時有一定縮放。
(6)cctransitionpageturn
描述:翻動書頁的過渡效果。
(7)cctransitionrotozoom
描述:目前場景旋轉變小,新場景旋轉變大。
(8)cctransitionshrinkgrow
描述:目前場景縮小,新場景在其之上變大。
(9)cctransitionslideinl
描述:新場景從左邊滑入。該效果還有另外3個變化:
cctransitionslideinr:新場景從右邊滑入。
cctransitionslideinb:新場景從底部滑入。
cctransitionslideint:新場景從頂部滑入。
(10)cctransitionsplitcols
描述:将目前場景切成豎條,上下移動顯示新場景。該效果還有一個變化是cctransition splitrows,将目前場景切成橫條,左右移動顯示新場景。
(11)cctransitionturnofftiles
描述:将目前場景分成方塊,用分成方塊的新場景随機地替換目前場景分出的方塊。
(12)cctransitionprogressradialccw
描述:新場景沿着徑向逆時針顯示。該效果還有一個變化是cctransitionprogress radialcw,讓新的場景沿着徑向順時針顯示。
(13)cctransitionprogresshorizontal
描述:新場景沿着橫向逐漸顯示。該效果還有一個變化是cctransitionprogressvertical,讓新場景沿着縱向逐漸顯示。該效果是cocos2d v2.0新增場景過渡效果。
(14)cctransitionprogressinout
描述:新場景由内到外逐漸顯示。該效果還有一個變化是cctransitionprogressoutin,讓新場景由外到内逐漸顯示。該效果是cocos2d v2.0新增場景過渡效果。
為了更好地了解每種效果的實際表現,可以打開cocos2d模闆的示例項目cocos2d-ios.xcodeproj,運作transitionstest,檢視實際場景過渡效果。感興趣的讀者也可以仔細分析transitionstest.m,看看這些效果是如何具體實作的。