天天看點

《Cocos2D權威指南》——3.3 CCScene場景類

ccscene是ccnode的子類,和ccnode一樣,也是一個抽象類。事實上,ccscene和ccnode幾乎完全相同,唯一差異在于ccscene的錨點位置預設在螢幕中心。如果打開模闆中ccscene.h檔案,大家會發現其中隻說明ccscene繼承自ccnode,并沒有任何其他内容。圖3-4是典型的遊戲場景跳轉示意圖。

目前版本的cocos2d中,ccscene類基本上沒有附加任何邏輯機制和特殊功能。通常建議将ccscene作為其他所有節點的父節點,看作cclayer(層)對象的一個容器。

需要說明的是,通常ccscene的子節點都直接繼承自cclayer,cclayer包含各個遊戲對象。因為大多數情況下場景對象本身不包含任何遊戲相關的代碼,而且很少被子類化,是以它一般在cclayer對象裡通過+(id)scene靜态方法來建立。

《Cocos2D權威指南》——3.3 CCScene場景類

示例代碼如下:

此外,如果要實作各種動畫效果的場景切換,必須基于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,看看這些效果是如何具體實作的。

繼續閱讀