我本身就是喜歡簡單的人,無論生活上,又或編寫程式。
上星期有機會,和一個同事開了一個 Side Project,一隻 2D 動作遊戲,就這樣我便重拾起 2D Graphics library。我用了數天時間,將 SDL 包起來,效果也不錯,而且在當中學到了新東西,這個新東西就是 Game State Manager。
在 Internet上都看過很多有關 State Manager 的文章,在新買的 Game Programming Gems 5 中亦有一篇講解 State Manager 的,但我總是覺得複雜,那我就藉由這個 Side Project,開始了自己的 Game State Manager 製作。有趣的是,我做完這個 Game State Manager 後,發覺可以將整個遊戲的架構簡化了,我以往要做個 Demo,main.c 都會是這樣的:
bool Game_Init() {
...
}
bool Game_Render() {
...
}
bool Game_Update() {
...
}
bool Game_Exit() {
...
}
bool Game_Main() {
Game_Update();
Game_Render();
...
}
void main () {
InitOGNG();
Game_Init();
while (1) {
if ( IsClosed() )
break;
Game_Main();
}
Game_Exit();
EndOGNG();
}
遊戲的主程式一定要在 Game_Main() 、 Game_Update() 內,在這裡面才是真正的遊戲的運作。但是有了 Game State Manager 後,main.c 變成了這樣:
void main() {
InitOGNG();
StateCreate("test01", demoStart, demoUpdate, demoPause, demoExit);
while (1) {
if ( RunOGNG() == false )
break;
}
EndOGNG();
}
上面的 demoStart, demoUpdate, demoPause 及 demoExit 都是 Function,StateCreate 就是建立一個新的 GameState 和登記這幾個 Function 進去,而 RunOGNG() 內都會運行每個已登記的 GameState ( 就是 demoUpdate 了 ),差不多就是這樣了。相比起來,有 Game State Manager 的 main.c 確實是簡潔很多,而且亦可以在一個 Game State 內建立另一個新 Game State,已存在的 Game State 可以 Pause 暫停下來,或是刪除掉。這樣便可以很簡單地實現,由 Main Menu 進入 Option Menu,設定完後回到 Main Menu ,又或是遊戲進行中,暫停遊戲進入 Pause Menu 之類的功能。
Thursday, November 22, 2007
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment