2011-05-19 105 views
3

我正在研究一個微型遊戲引擎的屏幕管理器,到目前爲止,我找不到適合每個屏幕都使用「blob」來管理屏幕對象的解決方案。在需要一個控制器中的可渲染對象列表的情況下,blob是否可容忍?遊戲畫面管理

+0

Blob?原諒我,但你是什麼意思blob? – Bart 2011-05-19 13:32:15

+0

http://en.wikipedia.org/wiki/God_object – Johnny 2011-05-19 13:35:03

+1

每個屏幕都必須由不同的所需資源管理組件組成,因此在您的情況下,每個屏幕都可以有一個可渲染的對象管理器對象,它封裝並管理所有的可兌換物品,是否可靠的撲殺等等。我不太明白你在尋找什麼答案,你是否想要一個適合你的屏幕和管理的結構,或者你想知道你是否可以管理它? – 2011-05-19 13:47:26

回答

1

我會考慮在這種情況下使用MVC pattern。否則,如果你不小心,很容易得到一堆意大利麪代碼,其中屏幕代碼到達遊戲代碼,反之亦然。

+0

謝謝!這正是我迄今爲止所要求的。我完全忘記了這種模式,但似乎我已經不知何故潛意識地將它嵌入代碼中。謝謝你給我指導,這就是我想要的! – Johnny 2011-05-21 05:52:00

1

我最近編寫了一些你可能稱之爲「屏幕管理器」的東西。

我開始時的想法是,無論我做什麼遊戲,渲染系統在渲染(如何管理硬件)方面都將基本相同。變化的東西是呈現的東西,以及如何繪製它(我想要一個盒子,一個圓圈或一個位圖......代表什麼......等等)。

所以基本上,「遊戲狀態」負責知道如何渲染自己,並且在從屏幕管理器或圖形系統給出渲染表面時應該這樣做(它也應該負責其他事情,例如知道輸入,物理等行爲本身)。

我的GraphicsSystem對象單身,這被稱爲是這樣實現的:)

GameState gs; 
Graphics::System().Init(DOUBLE_BUFFER, 640, 480); 
... 
while(still_looping) { 
    ... 
    // When it is time to render: 
    Graphics::System().RenderGameState(&gs); 
} 

怎麼樣,你要問,圖形::系統(單知道如何渲染遊戲州?它知道,因爲比賽狀態從圖形系統暴露的監聽器繼承了......

//within GraphicsSystem.h... 
class BaseRenderer 
{ 
public: 
    virtual void Render(BITMAP *render_surface) = 0; 
}; 

//GameState defined with: 
class GameState : public BaseRenderer 
{ 
public: 
    void Render(BITMAP *render_surface); 
    ... 

可以與幾乎所有的子系統做到這一點......(很可能不是時機,因爲它需要在比賽中循環)。

爲什麼單身?那麼,它是C++,我假設只有1個屏幕或圖形子系統來渲染。我不確定您是否使用多個屏幕,或者手機或控制檯。另一種方式是將圖形系統作爲靜態全局變量存放在一個單獨的文件中,僅給出文件範圍,並在該文件中具有訪問函數(我的舊C方法)。

關鍵雖然是封裝。讓你的屏幕管理器管理硬件。讓你的遊戲狀態決定如何表達自己。

如果這沒有理解,請清除您的問題,我可以編輯答案。

+0

你的答案很有趣,雖然我確實已經設置了我的代碼(並在這一點上工作),但我試圖得到一個想法是一個好主意或不是,如果不是,你將如何管理當前呈現的對象。例如邁克所說的將是我的問題的答案。 – Johnny 2011-05-21 05:47:40