我對如何將變量的值從1個遊戲組件傳遞給另一個感到困惑。 我使用的是xna 4.0。XNA遊戲組件
我創建了兩個gamecomponents,drawstring和inputmanager。 我想讀取用戶的鍵盤輸入,並將其傳遞到將更新位置的抽繩上。我不能在drawstring(drawablegamecomponent)上添加組件。 我可以在課上做,但不能在遊戲組件上做。 你們可以在這裏發佈一些例子。對於初學者。
我對如何將變量的值從1個遊戲組件傳遞給另一個感到困惑。 我使用的是xna 4.0。XNA遊戲組件
我創建了兩個gamecomponents,drawstring和inputmanager。 我想讀取用戶的鍵盤輸入,並將其傳遞到將更新位置的抽繩上。我不能在drawstring(drawablegamecomponent)上添加組件。 我可以在課上做,但不能在遊戲組件上做。 你們可以在這裏發佈一些例子。對於初學者。
使用GameComponent
的東西,你會希望有Update
稱爲每一幀,並使用DrawableGameComponent
的東西,你會希望有Draw
稱爲每幀LoadContent
呼籲在適當的時候(在程序的開始,作爲以及無論什麼時候設備丟失,就像用戶在Windows上按下Ctrl-Alt-Del)。
對於InputManager
你可能要一個Update
方法,這樣就可以保持用戶輸入的更新,所以InputManager
可能是一個GameComponent
。 DrawString
聽起來不像它需要的那樣。這兩個級別聽起來像是可以成爲服務。在構造函數或你的遊戲類的Initialize
方法,像做了以下內容:(DrawString
和你想獲得遊戲服務的需要將Game
對象的引用任何其他類)
Components.Add(mInputManager = new InputManager(this));
Services.AddService(typeof(InputManager), mInputManager);
Services.AddService(typeof(DrawString), mDrawString = new DrawString(this))
(注意,GameComponent
不一定需要是服務,服務不一定需要是GameComponent
s。要獲得Update
和/或Draw
被調用,您必須分別調用Components.Add(...)
;以獲得一個對象可作爲服務檢索,您必須致電Services.AddService(...)
)。
然後,當你想使用一些其他的遊戲組件InputManager
或DrawString
服務(或者你已經通過你的遊戲對象的引用任何類),你可以這樣做:
InputManager input = (InputManager)Game.Services.GetService(typeof(InputManager));
就個人而言,我編寫擴展方法來做出更簡潔:
using XNAGame = Microsoft.XNA.Framework.Game;
...
public static T GetService<T>(this XNAGame pXNAGame)
{
return (T)pXNAGame.Services.GetService(typeof(T));
}
獲得輸入服務線然後就變成了:
InputManager input = Game.GetService<InputManager>();
我認爲這個問題的正確答案是「不要使用'GameComponent'」。你可以編寫你自己的類。你可以編寫你自己的接口。爲此,你可以使用一種方法。那麼你可以,你知道,*只是傳遞你的變量*(例如,參數的方法)。無論如何,'GameComponent' [有點糟糕](http://gamedev.stackexchange.com/a/9209/288)。 – 2012-07-07 13:57:45