基於元件方式的遊戲UI架構設計
在遊戲開發中,UI管理是一個比較麻煩的問題,特別是針對那種需要根據不同場景切換不同UI的遊戲,UI的組織和管理尤顯重要,能不能像將各個UI(比如:聊天視窗、系統介面)作為一系列的元件來管理呢?下面是筆者在實際開發中採用的一種方案:
根據UI元件的一般劃分粒度,將所有UIObject物件在GUISystem初始化時全部生成並放入_uiMap,是合理的,因為這裡還沒有對每個 UIObject呼叫InitUI,只是簡單的new,完成這些只需要極少時間。LoadCurUI能夠讓我們只需傳入一個場景id號,就可以載入對應的 UI,為了靈活方便,可以將場景id與其對應的UI元件名放在配置檔案中。
所有UI元件都必須從UIObject繼承而來,其中包含了一個指向具體實現視窗功能的Window物件的指標。這樣一個UI類就相當於一個 Window的Wrapper類,以便GUISystem統一管理。對於UI元件之間的互動,通過GUISystem作為中間層,彼此解除了較強的耦合。
在下一篇文章中,我將介紹如何利用CEGUI+Lua實現這種設計方案。