GameComponent
すべてのフレームで呼び出したいものに使用し、すべてのフレームで呼び出して適切なときに呼び出したいものに使用します(プログラムの開始時、およびデバイスが失われたときなど)Update
。ユーザーがWindowsでCtrl-Alt-Delを押したとき)。DrawableGameComponent
Draw
LoadContent
ユーザー入力を最新の状態に保つことができるように、メソッドInputManager
が必要な場合があります。必要なようには聞こえません。どちらのクラスも、サービスのように聞こえます。ゲームクラスのコンストラクターまたはメソッドで、次のようにします。Update
InputManager
GameComponent
DrawString
Initialize
Components.Add(mInputManager = new InputManager(this));
Services.AddService(typeof(InputManager), mInputManager);
Services.AddService(typeof(DrawString), mDrawString = new DrawString(this))
(DrawString
そして、ゲームサービスを取得したい他のクラスには、Game
オブジェクトへの参照が必要です。)
(GameComponent
sは必ずしもサービスである必要はなく、サービスは必ずしもsである必要はないことに注意してくださいGameComponent
。取得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>();