使用「元件」優化遊戲架構

2021-04-15 12:53:03 字數 1672 閱讀 3967

technorati 標籤:

component

, game framework

近日一直在思考如何將game framework設計的更加具有實用性和復用性。

搜尋了一下game framework,出現的有用的資訊非常的少,足見game framework的普及遠不如game engine。一般來講我們作為快速遊戲開發,都會採用乙個成熟的商業引擎作為我們的遊戲基礎,這樣可以減少很大的開發成本,並且能夠得到很好的技術支援。在拿到game engine之後我們會根據我們的遊戲型別來對引擎做一些facade封裝,並且對引擎做一些擴充套件,做關鍵的就是要為遊戲邏輯的開發提供乙個良好的工作環境。基於這些原因,構架乙個復用性強的game framework對於我們遊戲藝術的量產起著至關重要的作用。

game framework的設計根據不同的遊戲型別的可能有些不同,不如fps和rpg兩種不同的遊戲型別肯定具有不同的需求,構建乙個適用於所有的遊戲型別的game framework似乎複雜度有點過高,但是針對於某乙個型別去構架則會相對簡單很多,同時盡可能的去探索適用於all game type的game framework。

《game programming gem 6》中有一篇「基於元件的物件系統」,參考價值很大,看過之後深受啟發。傳統的物件導向程式設計認為乙個正方形是乙個特殊矩形,因此正方形應該作為矩形的乙個子類。《設計模式解析》一書中講到這並不是一種很好的設計思路,並且提出了「封裝變化點」的設計觀點,元件的概念大致就和「變化點」沾點親戚。

舉個例子來說明,乙個遊戲中存在的高階坦克具有很多功能,有些是其他的遊戲物件也有的,有些功能是其本身所特有的。首先,mesh是乙個遊戲中能看得見的,不同的遊戲物件具有的mesh不同,但是mesh本身缺存在這很多的相同點,因此可以設計乙個meshcomponent類作為可以set到某個遊戲物件的mesh的封裝類,meshcomponent具有一些mesh共有的資料成員,和操作方法,它是具體的某個遊戲物件的乙個元件(component)。同理可以抽象出來很多這樣的元件(如boundboxcomponent,particlecomponent …………)。

乙個基於元件的物件系統的設計大致思路:

1、對於每個遊戲物件(actor)都擁有乙個component的容器(一般用map),可以在任何需要的時刻新增和刪除乙個元件;

2、元件使用id標示,便於索引,並且有些元件不能建立多個等等;

3、component根據遊戲型別的需求抽象出來乙個基本的繼承體系,一般夠用原則就ok啦,實際遊戲邏輯實現時如果需要用到乙個特殊的component可以再擴充套件繼承體系;

4、component儲存乙個owner的引用,可以方便的得到owner的一些資料,和方便和owner擁有的其他元件之間通訊(這種方式增加了一些耦合度,要求使用時需要特殊注意一下);

5、使用元件模板來簡化元件的構造;

6、資料驅動元件物件建立,使用xml或者其他的資料提供方式構造元件。

構建乙個基於元件的遊戲物件系統,對於整個game framework來說會帶來至少一下一些很直觀想到的益處:1、對擴充套件開發,對修改關閉,我們可以使用很少的類來擴充套件出來我們不同的component,但是對於遊戲物件本身不需要做很多的繼承體系;2、減少了類的繼承體系,同時避免了類**的問題。

對於乙個game framework,基於元件的設計是一種很好的設計方式,可以為遊戲邏輯提供乙個方便的建立遊戲物件機制,並且某個模組可以很清晰的取得自己關心component資料,同時也是一種高可擴充套件性的解決方案。

hive架構元件以及使用

hive說明 1,hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類sql查詢功能 2,hive 的效率取決於 mapreduce或者spark 3,hive將 sql語句翻譯成mapreduce程式,然後yarn hdfs 4,hive 將表結構儲存於...

react 元件架構

容器型元件 container component 展示型元件 presentational component 把網路請求 列表展示的元件拆分成以上的容器型元件 展示型元件 在容器元件中訪問網路,有結果之後執行setstate,在render中使用展示型元件,網路請求來的列表通過propos傳遞給...

OpenCV元件架構

calib3d calibration 校準 加3d這兩個詞的組合縮寫。這個模組主要是相機校準和三維重建相關的內容。基本的多視角幾何演算法,單個立體攝像頭標定,物體姿態估計,立體相似性演算法,3d資訊的重建等等。contrib contributed experimental stuf的縮寫,該模組...