2

あるゲームコンポーネントから別のゲームコンポーネントに変数の値を渡す方法について混乱しています。xna4.0を使用しています。

ドローストリングと入力マネージャーの 2 つのゲーム コンポーネントを作成しました。ユーザーのキーボード入力を読み取り、それをドローストリングに渡し、そこで位置を更新したいと考えています。

drawstring(drawablegamecomponent) にコンポーネントを追加できません。クラスではできますが、ゲームコンポーネントではできません。ここにいくつかの例を投稿できますか。初心者向け。

4

1 に答える 1

2

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>();
于 2012-07-07T19:01:52.960 に答える