游戲引擎是決定游戲基本程序運(yùn)行的關(guān)鍵,如何開(kāi)發(fā)好游戲引擎就成為游戲程序開(kāi)發(fā)者必須掌握的一項(xiàng)技能。這里要說(shuō)的并不是基礎(chǔ)設(shè)計(jì)方法,而是更進(jìn)階的設(shè)計(jì)模式。下面我們就來(lái)看看一些在游戲引擎開(kāi)發(fā)中常用的幾種設(shè)計(jì)模式。
僅僅因?yàn)槟阒谰幊陶Z(yǔ)言的語(yǔ)法,不足以讓你成為一個(gè)程序員。我討厭這么對(duì)你說(shuō),但它確實(shí)是真的。什么知識(shí)將會(huì)使你成為一個(gè)真正的程序員呢?答案是數(shù)據(jù)結(jié)構(gòu),算法和設(shè)計(jì)模式的知識(shí)。語(yǔ)言的語(yǔ)法與知道字母表同義。任何人,我的意思是任何人,可以在一個(gè)周內(nèi)學(xué)會(huì)編程語(yǔ)言的語(yǔ)法。但是這樣的人不可能開(kāi)發(fā)模塊化的、靈活的、可維護(hù)的應(yīng)用。
現(xiàn)在我已經(jīng)打破了你的心情和愿望,現(xiàn)在讓我向你介紹設(shè)計(jì)模式,這將使你成為一個(gè)偉大的開(kāi)發(fā)人員。
這有幾種設(shè)計(jì)模式。他們中的大多數(shù)在書(shū)中都有相關(guān)的解釋。但是最常用和最喜歡的設(shè)計(jì)模式如下:
單例模式(SingletonDesign Pattern: Allows only):只允許創(chuàng)建一個(gè)類(lèi)的一個(gè)實(shí)例。
策略模式(StrategyDesign Pattern):通過(guò)解耦類(lèi)行為從而提供靈活性。
觀察者模式(Observer Design Pattern):允許類(lèi)在不知道任何事情的情況下相互交互。
組合模式(CompositeDesign Pattern):為所有類(lèi)提供了統(tǒng)一的接入點(diǎn)。
模型-視圖-控制器模式(Model-View-Controller Design Pattern)(MVC):搖滾樂(lè)隊(duì)中的“披頭士”。
我將在游戲引擎開(kāi)發(fā)方面討論每種設(shè)計(jì)模式(我是一個(gè)偏執(zhí)的游戲引擎開(kāi)發(fā)者)。但是,以下概念適用于任何應(yīng)用或游戲開(kāi)發(fā)。
單例模式(Singleton Design Pattern)
在游戲中,就像在電影里,應(yīng)該只有一個(gè)導(dǎo)演。導(dǎo)演是一個(gè)類(lèi),這個(gè)類(lèi)在游戲中指揮發(fā)生的事情。它控制對(duì)象的呈現(xiàn)。它控制位置更新。它將玩家的輸入指向正確的游戲角色。
引擎應(yīng)該阻止創(chuàng)建一個(gè)以上的導(dǎo)演類(lèi)的實(shí)例,通過(guò)單例設(shè)計(jì)模式來(lái)實(shí)現(xiàn)。此設(shè)計(jì)模式確保為給定類(lèi)實(shí)例化有且只有一個(gè)對(duì)象。
策略模式(Strategy Design Pattern)
在游戲中,你應(yīng)該將輸入控制器和游戲邏輯之間的交互進(jìn)行解耦。游戲的邏輯應(yīng)該接收相同類(lèi)型的輸入,而不管輸入控制器是什么(按鈕,手勢(shì),操縱桿)。
管對(duì)用戶(hù)每個(gè)輸入控制器的行為表現(xiàn)不同,但它們必須向游戲的邏輯提供相同的數(shù)據(jù)。此外,添加或刪除輸入控制器不應(yīng)導(dǎo)致游戲崩潰。
這種解耦行為和靈活性是可能的,這歸功于策略設(shè)計(jì)模式。這種設(shè)計(jì)模式允許通過(guò)動(dòng)態(tài)方式來(lái)改變行為,而不需要修改游戲的任何邏輯,為你的游戲提供了很高的靈活性。
觀察者模式(Observer Design Pattern)
在游戲中,你的所有類(lèi)耦合度應(yīng)該設(shè)計(jì)的很低。這意味著你的類(lèi)應(yīng)該能夠彼此交互,且彼此之間應(yīng)該知道對(duì)方盡量少的內(nèi)容。使得你的類(lèi)具有低耦合度,使得你的游戲可以模塊化和靈活性的添加新的功能,且不會(huì)有意外的錯(cuò)誤。
此模式通常在對(duì)象想要向其訂閱戶(hù)(其他類(lèi)對(duì)象)發(fā)送消息時(shí)實(shí)現(xiàn)。對(duì)象不需要知道訂閱者如何工作,但是他們能相互通信。
組合模式(Composite Design Pattern)
游戲通常包含許多視圖。主視圖中顯示角色。有一個(gè)子視圖,顯示玩家的積分。有一個(gè)子視圖,顯示游戲中剩下的時(shí)間。如果你在移動(dòng)設(shè)備上玩游戲,那么每個(gè)按鈕都是一個(gè)視圖。
∩維護(hù)性應(yīng)該是游戲開(kāi)發(fā)過(guò)程中的主要關(guān)注點(diǎn)。每個(gè)視圖不應(yīng)具有不同的函數(shù)名稱(chēng)或不同的訪問(wèn)點(diǎn)。相反,你想要為每個(gè)視圖提供一個(gè)統(tǒng)一的訪問(wèn)點(diǎn),即相同的函數(shù)調(diào)用應(yīng)該既能夠訪問(wèn)主視圖也能夠訪問(wèn)子視圖。
這種統(tǒng)一的接入點(diǎn)可以使用復(fù)合設(shè)計(jì)模式。此模式將每個(gè)視圖放置在樹(shù)狀結(jié)構(gòu)中,從而為每個(gè)視圖提供統(tǒng)一的訪問(wèn)點(diǎn)。取代了需要用不同的函數(shù)來(lái)訪問(wèn)不同的子視圖,組合模式可以用相同的函數(shù)訪問(wèn)任何視圖。
模型-視圖-控制器模式(Model-View-Controller Design Pattern)
如果模型-視圖-控制器設(shè)計(jì)模式是一個(gè)搖滾樂(lè)隊(duì),那么它肯定會(huì)被稱(chēng)為“披頭士”。毫無(wú)疑問(wèn)。它是程序員中最廣泛使用和喜歡的設(shè)計(jì)模式。
我通過(guò)模型視圖控制器來(lái)介紹設(shè)計(jì)模式的。但我希望這不會(huì)是這樣的。我和許多程序員一樣,開(kāi)始學(xué)習(xí)這個(gè)設(shè)計(jì)模式,但沒(méi)有意識(shí)到這個(gè)模式是由三個(gè)基本的設(shè)計(jì)模式組成的。沒(méi)有意識(shí)到這個(gè)事情,造成了很多困惑。
模型-視圖-控制器設(shè)計(jì)模式由三種模式組成:
策略模式
觀察者樣式
組合模式
如上圖所示,策略模式表示MVC中的Controller部分。策略模式將用戶(hù)輸入與游戲的邏輯(Model)和接口(View)分離。
組合設(shè)計(jì)模式表示應(yīng)用程序中的所有視圖(主窗口和按鈕)。此設(shè)計(jì)模式為模型的所有視圖提供統(tǒng)一的訪問(wèn)點(diǎn)。
觀察者模式代表你的應(yīng)用程序(模型)中的邏輯。通過(guò)這種模式,模型能夠與視圖和控制器進(jìn)行交互,而不需要知道它們內(nèi)部細(xì)節(jié)。這種模式使所有類(lèi)之間的交互有更低的耦合度。
希望這篇文章可以幫助你。
投稿郵箱:chuanbeiol@163.com 詳情請(qǐng)?jiān)L問(wèn)川北在線(xiàn):http://dstuf.com/