你好,歡迎來(lái)到川北在線(xiàn)
微信
騰訊微博
新浪微博
在游戲引擎開(kāi)發(fā)中常用的幾種設(shè)計(jì)模式
時(shí)間:2017-06-05 11:47   來(lái)源:GAD   責(zé)任編輯:毛青青

  游戲引擎是決定游戲基本程序運(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/

川北在線(xiàn)-川北全搜索版權(quán)與免責(zé)聲明
①凡注明"來(lái)源:XXX(非在線(xiàn))"的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),本網(wǎng)不承擔(dān)此類(lèi)稿件侵權(quán)行為的連帶責(zé)任。
②本站所載之信息僅為網(wǎng)民提供參考之用,不構(gòu)成任何投資建議,文章觀點(diǎn)不代表本站立場(chǎng),其真實(shí)性由作者或稿源方負(fù)責(zé),本站信息接受廣大網(wǎng)民的監(jiān)督、投訴、批評(píng)。
③本站轉(zhuǎn)載純粹出于為網(wǎng)民傳遞更多信息之目的,本站不原創(chuàng)、不存儲(chǔ)視頻,所有視頻均分享自其他視頻分享網(wǎng)站,如涉及到您的版權(quán)問(wèn)題,請(qǐng)與本網(wǎng)聯(lián)系,我站將及時(shí)進(jìn)行刪除處理。



圖庫(kù)
合作媒體
金寵物 綠植迷 女邦網(wǎng) IT人
法律顧問(wèn):ITLAW-莊毅雄律師