2008年7月4日 星期五

組織起一個遊戲引擎

在組織一個遊戲引擎之前,第一件也是最重要的一件事是,先定義這個遊戲引擎的定位是什麼。

舉例來說,這個遊戲引擎將會是一個繪圖程式庫還是一個全能的遊戲開發環境?

像Gamebryo、RenderWare是一個繪圖程式庫,Unreal就是一個很強大的,幾近全能的遊戲開發環境。甚至還有像BigWorld這樣的專門為大型網路遊戲所設計的遊戲引擎。

定位的另一種涵義是需求。我常常犯一種錯誤,該處理的需求不做,卻偏偏做一堆用不到的東西。

我把這個遊戲引擎,定位為一個繪圖程式庫,提供遊戲需要的基本的繪圖處理功能。另外,我會再加上必要的工具程式。

說實話,就使用者的觀點來說,工具程式比程式庫還重要。但是對開發者而言,尤其是技術導向的開發者,就覺得那是枝微末節的事。我曾經忽略過這樣的事實,後來就必須老老實實的還債。

範例程式跟說明文件也很重要,不過在開發的過程中,我會寫需要的設計文件與測試程式,也就可以滿足這兩塊的需求。

簡單的組織架構像是這樣。

以Graphic Kernel為核心,Math Library、Core Utility提供必要的支援物件,Tools Set則是工具程式組。

比較特殊的是Graphic API與Graphic Kernel 之間的關係,我用了反向依存的方式來降低兩個模組之間的耦合程度。Graphic Kernel中定義了一個IGraphicAPI的介面,而實做層則放在Graphic API模組中。用這樣的方式,我把最低階的繪圖工作拉到Graphic API模組來做,這個模組會跟DirectX API有關聯,而Graphic Kernel模組則完全不受DirectX影響。

當然,野心如果大一點,我可以做兩三個不同實做程序的Graphic API模組,這樣我只要將API模組抽換,我的程式就能夠支援DirectX, OpenGL,.....

不過野心太大不是好事。

基礎的組織結構就這樣了,我想我可能還需要針對模組內的架構來寫一些設計文件。

2 則留言:

匿名 提到...

我很想要了解一個遊戲、一個朝向遊戲想要開發的人,您會給他什麼樣的意見?

我覺得很多人都講說每一個人要專精,我完全不知道該怎麼去做自己,到底目標該怎麼去實現呢?

藍斯洛 提到...

別的我不敢說,就程式設計這方面來講,最直接有效的方法,就是學習寫程式,試著自己寫一個小遊戲出來。

實際動手做,比空想實在。

而且在這個過程裡,你可以發現自己究竟只是單純的想要做遊戲還是真的適合這一行...