2011-01-24 53 views
0

我在XNA編程,需要幫助組織我的課程和代碼: 我有一個按鈕類和一個按鈕管理器。 我也有一個場景班和一個場景管理員。如何組織多個xna遊戲組件?

按鈕管理器處理不同屏幕上繪製的不同按鈕,因爲幾乎所有的屏幕都會有一個按鈕。 場景管理器做同樣的事情,除了處理按鈕,它處理只需要繪製的背景場景對象。 兩位經理都依賴當前的遊戲狀態來確定要繪製哪些按鈕或場景對象。

我應該如何組織我的代碼,以便兩位經理知道當前的遊戲狀態是什麼? (兩位經理都在主遊戲類中進行實例化,兩位經理都是遊戲組件)

回答

2

你正在尋找的關鍵字描述您的問題是「遊戲狀態管理」的XNA網站上有一些好文章,請務必閱讀這一個:http://create.msdn.com/en-US/education/catalog/sample/game_state_management

我們可以更直接地回答你的問題。假設你有兩種不同的狀態 -Menu -Game

首先創建一個名爲State的類,並使用方法來設置繪製和更新正確的UI元素。

現在創建一個派生自State的類MenuState並覆蓋設置,繪製和更新方法。在設置方法中,將所有代碼生成正確的菜單。 (像Scene.MenuItems.Clear(); Scene.MenuItems.Add(new Label(..));等等。)。對更新和繪製方法做同樣的事情(更新並繪製每個控件,捕捉點擊按鈕等等的事件......)

對GameState也做同樣的事情。

現在在您的場景代碼中創建一個字段「狀態」。當用戶將轉義集狀態按下(新的)MenuState時。當用戶返回到(新的)GameState的遊戲設置狀態時。在場景的更新和繪製方法中,調用state.Update(..)和state.Draw(..)。由於您在GameState和MenuState中覆蓋了這些方法,因此將執行正確的操作。

這種方法解決了像gazzillion控件一樣檢查「if(scene.StateEnum == StateEnum.SomeState){DoThis();}」的問題。你會發現這種方式更容易管理。

同時考慮構建其他概念類。像MenuState可以有一個子狀態,「選項菜單」。也許想出一個表格班等...

0

SInce GameComponent有一個遊戲屬性,您可以使用它來投射到遊戲類,或者獲得暴露遊戲狀態的服務。