MVC模式在遊戲開發的應用

原地址:html

http://www.cocoachina.com/gamedev/2012/1129/5212.html

MVC是三個單詞的縮寫,分別爲:模型(Model)、視圖(View)和控制Controller)。MVC是一個設計模式,它強制性地使應用程序的輸入、處理和輸出分開,將應用程序分紅三個核心部件:模型、視圖、控制器。它們各自處理本身的任務,關係如圖所示:數據庫

模型是數據層,視圖是表現層,控制器是邏輯層,也對應於程序運行中的數據輸入,數據處理,數據輸出基本三步驟。事實上,MVC模式開發也適合遊戲開發。

數據驅動

近日看到一篇Blog寫的驅動法的使用心得,此博文總在強調數據與邏輯的對立,實現的技術就是表驅動。而將這種技術的昇華一下,就是數據驅動技術。而這種技術應用到遊戲中,就是數據驅動遊戲開發了。在遊戲未開發以前,定義經過必定的格式定義其數據元素,讓美術資源與技術分離開了。

層次化設計

自從面向對象的程序設計方法稱爲主流以後,封裝的概念很是之流行。類將對象的屬性與方法封裝在一塊兒,隨之而生就是模塊化設計。經過開放相應接口,實現模塊之間的通訊。模塊化設計能夠說是程序設計的一大進步.而層次化設計方法也能夠說模塊化設計,只不過模塊之間就用必定的列序關係。MVC模式關注於數據在程序運行中不一樣狀態(數據層,邏輯層,表現層)的層次化設計

層次化設計有兩個關鍵性問題:分層與整合。在設計的過程當中,如何將總體設計分層,層與層之間的界定規範怎麼肯定。當各層次模塊已經開發完成,如何整合它們使其在總體上實現無縫聯接。

MVC模式很好的解決了上述兩個問題。按照MVC模式的思路,遊戲也能夠劃分相應的三層:數據層,邏輯層,表現層。其定義以下:

數據層就是各類資源(圖片,聲音,動畫)在遊戲引擎中造成的對象集合。美術提供的這些是最原始的,須要遊戲引擎封裝成一組可控的代碼。在Cocos2D中就用相應的對象來直接初始化這些原始資源,好比Sprit,Menu,SimpleAudioEngine等等。這些對象在整個遊戲中能夠劃分爲數據層。最好的例子就是CocosBuilder生成的ccb文件經過引擎解析而成的類。當最原始的資源文件經過必定的文件格式組織起來,進而經過引擎造成對象集合,這是最可取的數據層生成方法。在捕魚2中,多處的功能模塊設計使用這樣的方法。好比多國語言的本地化。全部的字段的翻譯經過一個plist文件存儲,造成一張二維表。當須要切換語言時,只須要改變某個key相對的Value就好了。邏輯層不須要作任何改變。

邏輯層能夠劃分爲數據接口層,遊戲AI層,操做控制層。數據接口層是負責從數據層中提供相應的數據對象進行封裝組合。在這個層次上,相似與面向對象中類的屬性定義,並提供控制(Set/Get)接口。這一層既能夠是無結構化(原始數據類型定義),也能夠是結構化(表,樹,集合)。遊戲AI層是邏輯層之核心,定義了其下面的各類數據元素的狀態變化(金幣數量,武器等級,動畫播放……)。根據不一樣的狀態變量,控制着數據元素的狀態表現,是遊戲的大腦,指揮控制中心。操做控制層,負責處理用戶的輸入,並註冊或綁定相應的AI事件。在邏輯層中,數據接口層向下面對數據層,操做控制層向上面對用戶行爲事件,而遊戲AI層統籌這兩層。

表現層恰似於Cocos2D中的Direct與Scene,掌控着遊戲的大背景,並負責將程序中的各個數據元素各類狀態及時顯示。

層次化設計在軟件設計上應用很是之廣,好比計算機網絡中的TCP/IP網絡模型(物理層,鏈路層,網絡層,傳輸層,應用層),數據庫技術(物理數據層,概念數據層,邏輯數據層)。其共同之特色是層次化,而數據庫技術則強調數據與邏輯的獨立性。

總結

數據驅動遊戲開發在於實現數據與邏輯的分離,讓遊戲開發從數據層面獨立出來,專一於設計,AI處理,實現遊戲快速開發。當邏輯層成熟後,只需跟換不一樣的風格的數據層,就是另外一款別樣的遊戲,能更快的知足用戶的時尚審美需求。或許MVC模式可爲之借鑑。設計模式

相關文章
相關標籤/搜索