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