Director Scene Layer and Sprite 導演、場景、層及精靈

Scenes 場景

場景(“CCScene”實現)基本算是應用工作流中一個獨立的元素。有人可能會把它叫作“屏幕”或“舞臺”。一個應用可以有很多個場景,但特定時間內只有一個場景是處於活動狀態。

例如一個遊戲可能會有以下場景:遊戲介紹、菜單、第一關、遊戲情節片段1(Cutscene 1)、第二關、勝利情節片段、失敗情節片段、高分顯示界面等。你可以把其中任何一個場景都想成是一個獨立的應用,這些獨立的應用可以通過少量的“膠水”代碼進行粘合。例如,遊戲介紹場景可以在介紹結束後進入菜單,而第一關場景可能會進入到遊戲情節片段1(如果玩家贏了的話)或者不進入到遊戲情節片段(如果玩家輸了的話)。遊戲場景流程圖如下所示:

scenes650x144.png

Coco2d引擎中的“CCScene”有一個或多個“CCNode”組成,這些節點會被當作子類添加到場景中。“CCNode”的子類如“CCLayer”和“CCSprite”會給場景增加畫面和活動。通常情況下,屏幕都是作爲“CCLayer”的子類被實現並添加至空白的“CCScene”場景實例中。其他圖像或遊戲元素也要當作“CCNode”節點來實現,並把這些元素當作子類添加到創建的“CCLayer”中。

因爲場景是CCNode子類,可以手動或通過使用CCAccion來轉換。詳見動作。

此外還有一系列“CCScene”類稱爲“過渡”(transitions),通過“CCTransitionScene”類實現。這些類可以讓你在切換場景時製作出特別的過渡效果,比如淡進淡出、滑入側邊等等。

Director 導演

“CCDirector”是一個共享的(單元素集)對象,負責不同場景之間的控制。導演知道當前哪個場景處於活動狀態,允許你改變場景,或替換當前的場景,或推出一個新場景。當你往場景堆中推出一個新場景時,“CCDirector”會暫停當前場景,但會記住這個場景。之後場景堆中最頂層的場景跳離時,該場景又會繼續活躍。
此外“CCDirector”還負責初始化OpenGL ES。

Layers 層

“CCLayer”層是一個“CCNode”節點,知道如何處理觸摸事件。層知道如何畫圖,可能是半透明的,允許玩家看到背後的其他層級。“CCLayers”在定義遊戲畫面和活動時非常有用,所以預計你會花很多時間來編碼“CCLayer”子類。

layers.png

“CCLayer”也是你定義觸摸事件處理器(handler)的地方。“CCLayer”會通過調用某種方法(ccTouchBegan、 ccTouchMoved、ccTouchEnded或ccTouchCancelled)來處理觸摸事件以迴應用戶的交互。這些觸摸事件幾乎佈滿一個場景的所有層級,前前後後,直到一些層級捕獲了該捕獲並接受了該觸摸時間。

複雜的應用會要求你定義特定的“CCLayer”子類,cocos2d提供了幾個預設的子類,例如“CCMenu”(一個簡單的菜單層)、“CCColorLayer”(一個繪製純色的顏色層)以及“CCLayerMultiplex”(一個允許你複用子類的層,一次激活一個子類時會關閉其他子類)。

層可能會把任何“CCNode”節點當作子類包含進去,包括“CCSprite”、“CCLabels”甚至“CCLayer”對象。因爲層是“CCNode”的一個子類,因此可以手動轉換或者使用“CCAction”轉換。欲瞭解更多信息,請參考動作章節。

多層樣例:

CCLayerGradient* layer1 = CCLayerGradient::create(ccc4(255, 0, 0, 255), ccc4(255, 0, 255, 255));
layer1->setContentSize(CCSizeMake(80, 80));
layer1->setPosition(ccp(50,50));
addChild(layer1);
CCLayerGradient* layer2 = CCLayerGradient::create(ccc4(0, 0, 0, 127), ccc4(255, 255, 255, 127));
layer2->setContentSize(CCSizeMake(80, 80));
layer2->setPosition(ccp(100,90));
addChild(layer2);
CCLayerGradient* layer3 = CCLayerGradient::create();
layer3->setContentSize(CCSizeMake(80, 80));
layer3->setPosition(ccp(150,140));
layer3->setStartColor(ccc3(255, 0, 0));
layer3->setEndColor(ccc3(255, 0, 255));
layer3->setStartOpacity(255);
layer3->setEndOpacity(255);
ccBlendFunc blend;
blend.src = GL_SRC_ALPHA;
blend.dst = GL_ONE_MINUS_SRC_ALPHA;
layer3->setBlendFunc(blend);
addChild(layer3);

multi-layers.png

Sprites 精靈

Cocos2d引擎的“CCSprite”精靈跟你在其他遊戲引擎中看到的差不多。“CCSprite”精靈是一個2D圖像,可以移動、旋轉、放大縮小、活動,還能進行其他變化。精靈(通過“CCSprite”類實現)還可以有其他精靈當作子類。當父類被轉變時,該父類下的所有子類也將被轉變。因爲精靈實際是“CCNode”的一個子類,可以手動轉變或者使用“CCAction”轉變。欲瞭解更多信息,請參考動作章節。


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