2011-08-03 161 views
3

我正在研究一個小型遊戲引擎,並且遇到了問題。如何組織遊戲引擎

到目前爲止,我有一個窗口類是一個Win32窗口的包裝。我還有一個窗口管理器類(它是一個單例類),用於管理窗口的創建和窗口消息的處理。然後我有一個引擎類,這是迄今爲止最重要的類,因爲它是引擎的接口。此引擎類包含主循環,direct3d設備以及創建和銷燬它的代碼。此引擎類還包含一個Window類對象,該對象用作direct3d設備的主/主窗口。

我的問題是引擎需要對某些窗口消息作出反應(如WM_SIZE或WM_ACTIVATEAPP),但消息處理程序是Widnow類的一部分,它是Engine類下面的「級別」。我也認爲我應該創建另一個類來封裝引擎的渲染/圖形,然後將該類添加到主引擎類。

所以我不確定我是否應該有一個Window類內的Graphics類或Graphics類內的Window類,或者將它們並排放在主引擎類中。

+0

建議您以視覺(僞代碼)方式更清楚地概述您的類結構,以便其他人理解。 – gahooa

+0

屬於gamedev.stackexchange.com – Puppy

回答

4

你生活在一個事件驅動的世界,所以使用事件。讓你的窗口包裝提供遊戲引擎可以掛鉤和反應的事件。

+0

那麼就像觀察者模式一樣? – Zayats

+0

是的,正好。這不僅僅與windows有關,你可以使用事件來進行任何實體間的通信,就像跟隨主要人物或任何其他事物一樣。這和工廠模式(用於加載,存儲和訪問媒體)將使你遠離! – Blindy

+0

我試過了,它很有效!謝謝 – Zayats

1

不要讓控制遊戲引擎與底層操作系統如何與引擎對象的孩子交互的對象。操作系統層應驅動引擎,反之亦然。

(大多數發動機和程序員犯了這個錯誤,順便說一句。)

+0

所以我應該有一個控制所有其他類的框架類? – Zayats

+0

@Zayats,「Framework」類是什麼? – MSN

+0

可能是一個包含用於圖形,輸入,定時,GUI等組件的類,它將負責初始化所有這些組件,並控制它們之間的通信。 – Zayats

1

請問你曾經有多個Windows?越來越多的多顯示器越來越多地用於各種遊戲。

你會在一個窗口上運行多個圖形嗎?相當不可能。這表明Window應該是Graphics,而不是其他方式。

+0

謝謝,當您考慮它時,它確實有意義,但您是否可以將一個設備用於多個窗口? – Zayats

+0

@Zayats:你當然可以。像Supreme Commander這樣的遊戲本身支持兩個窗口。 – Puppy