Cocos2D X設計模式 組合模式

2021-06-25 08:30:21 字數 935 閱讀 6655

在開始挖掘cocos2d-x裡面的組合模式之前,我先武斷地下個結論:

「幾乎所有與gui相關的框架設計都應用了組合設計模式」。(ps:大家注意我的用詞,是「幾乎所有」,給自己留條後路,哈哈)

說到樹,我們馬上就會想到樹根,樹幹和樹葉。一棵樹一般只包含乙個根,若干樹幹和大量的葉子。同時,樹幹長在樹根上,樹葉長在樹幹上。(ps:這有點廢話了,不過讀者莫急,耐著性著往下看。)對應於cocos2d-x裡面,就是乙個遊戲有乙個主場景gamescene,它是樹根,然後它有若干個樹幹(gamelayer、hudlayer、inputlayer、backgroundlayer和levellayer等),最後,每乙個樹幹又包含若干個樹葉(比如sprite、particles、font、tiledmap nodes、etc)。

說完了這些,你可能會問了,這跟組合模式有毛關係啊。好,組合模式正式登場!

cocos2d-x裡面的ccscene、cclayer、ccnode派生類(不含cclayer和ccscene)共同組成了乙個樹形結構,這樣我們便可以以一致地方式來處理這些類,比如addchild、removechild和getchildren。處理「整體-部分關係」(通常是樹形結構),並且能夠以一致地方式來對待整體與部分,這不正是組合模式的應用場景嗎。

優點:1)、優化處理遞迴或分級資料結構。

2)、一致地對待組合物件與單個物件,可以簡化客戶端呼叫

缺點:1)、如果是透明實現的組合模式,單個物件也會包含組合物件的方法,這樣會給客戶端呼叫造成麻煩,因為單個物件實際上是不會實現這些組合物件的方法的。

模式定義:

將物件組合成樹形結構以表示「部分整體」的層次結構。組合模式使得使用者對單個物件和使用具有一致性。

uml類圖:

一般實現:參考這篇文章

因為遊戲開發不是設計框架,基本上使用組合模式的情形不多。但是,如果有遞迴或者樹形結構的物件關係,都可以考慮使用組合模式。

暫不討論

Cocos2d x的設計模式

單例模式 單例模式的定義是產生乙個類的唯一例項,但js本身就是一種 無類 語言,很多講就是設計模式的文章把 當成乙個單例來使用也勉強說的通,因為js生成物件的方式有很多種。簡單工廠模式 簡單工廠模式是由乙個方法來決定到底要建立哪個類的例項,而這些例項經常都擁有相同的介面,這種模式主要用於在所例項化的...

cocos2dx中的設計模式

1.二段構建模式 大家都知道在c 中我們一般在建構函式中為物件分配記憶體空間然後初始化成員變數,比如我們呼叫了new某個東西,那麼在堆上會先為物件分配記憶體空間,然後呼叫建構函式,在建構函式中完成一些初始化的工作。而二段構建模式就是將記憶體空間的分配和初始化分開來完成,然後呼叫乙個靜態方法來返回這個...

cocos2d x 混合模式

在opengl es 使用glblendfunc函式實現實現混合模式,cocos2d x中可以使用blendfunc。什麼是顏色混合?簡單來說就是將rgba中的a,經行操作處理。具體一點,就是把某一畫素位置原來的顏色和將要畫上去的顏色,通過某種方式混在一起,從而實現特殊的效果。opengl 會把源顏...