cocos2d移動開發

關鍵詞:技術移動開發怎麼實現

先來說一下委託模式是什麼,下面的內容摘要自維基百科:

委託模式是軟體設計模式中的一項基本技巧。在委託模式中,有兩個對象參與處理同一個請求,接受請求的對象將請求委託給另一個對象來處理。委託模式是一項基本技巧,許多其他的模式,如狀態模式、策略模式、訪問者模式本質上是在更特殊的場合採用了委託模式。委託模式使得我們可以用聚合來替代繼承。

簡單的Java例子

在此例中,類模擬印表機Printer擁有針式印表機RealPrinter的實例,Printer擁有的方法print()將處理轉交給RealPrinter的print()方法。

通過使用接口,委託可以做到類型安全並且更加靈活。在這個例子中,類C可以委託類A或者類B,類C擁有方法使自己可以在類A或者類B間選擇。因為類A或者類B必須實現接口I規定的方法,所以在這裡委託是類型安全的。這個例子顯示出委託的缺點就是需要更多的代碼。

對於cocos2d-x中的委託設計模式,在這裡我不講GUI方面的委託模式。例如Menu的響應事件,Button的響應事件,我主要將一下在遊戲控制中,判斷遊戲開始、運行、結束時用到的委託模式,這樣把這三個邏輯都交給一個委託類來實現,思路較清晰,而且可以重複利用,減少開發周期。

遊戲中的主要邏輯都集中在GameLayer層中,在GameScene場景中添加所需要的Layer層,然後在各個Layer層中實現相應的邏輯。

對於大多數的開發中,我都是在一個GameLayer層中完成遊戲中的所有邏輯判斷,後來感覺這種方法使GameLayer層的代碼太臃腫,太不清晰,自己看著都想重構一下代碼。

接下來以一個小demo來介紹下cocos2d-x中的委託模式的巧妙運用,使遊戲開發更清晰,更快捷。

先來看一下委託類,遊戲中的開始、運行、結束的邏輯判斷都在這個委託類中實現。

下面是委託類的實現代碼,StatusLayer.h的具體代碼

下面來看委託類StatusLayer的具體實現。

Statuslayer.cpp

委託類中的實現主要是實現了父類StatusDelegate類中的三個虛函數onGameStart(),onGamePlaying(),onGameEnd(),這三個函數不必在GameLayer中實現,可以在GameLayer中調用委託類中的這三個函數,來實現相應的邏輯判斷,也起到了GameLayer層和StatusLayer層通信的目的。

好了,這篇介紹了具體的委託類的實現,下一篇介紹這個委託類的具體使用。

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場