私は長い間頭を悩ませてきました。
Game1 というメインのGameクラスと、 myShowUpという DrawableGameComponent を継承した ShowUpクラスがあります。
通常の方法は、コンポーネントmyShowUpをGame1オブジェクトに追加して、次のように ( Game1の Initialize メソッドで直接) ゲームの一部にすることです。
class Game1 : Microsoft.Xna.Framework.Game
{
ShowUp myShowUp;
...
protected override Initialize ()
{
this.myShowUp = new ShowUp(this);
this.Components.Add(this.myShowUp);
}
...
}
このメソッドは機能し、myShowUpが表示され、ゲーム内の独立したオブジェクトになります。
私が望むのは、後でオブジェクトをインスタンス化してゲームオブジェクトリストに追加することです(たとえば、ウィンドウをクリックした後)
これは私の試みです:
class Game1 : Microsoft.Xna.Framework.Game
{
MouseState myMouseState;
...
...
protected override void Update(GameTime gameTime)
{
myMouseState = Mouse.GetState();
if (myMouseState.LeftButton == ButtonState.Pressed)
{
this.myShowUp = new ShowUp(this); // Nothing
this.Components.Add(this.myShowUp); // Happens..
}
base.Update(gameTime);
}
...
}
これまでにメソッドを見つけました。最初の構文を保持し (つまり、インスタンス化を Initialize メソッドに保持します)、アクティブ化されたという名前のShowUpクラスにブール値を定義します。activateが true の場合は、指示を実行して表示するか、何も表示しません。また、Gameオブジェクトの Update メソッドで、左ボタンを押してアクティブ変数を trueに変更すると、 myShowUpのactivate()を呼び出します。
この方法は機能しますが、私は満足していません。コード内の任意の場所でゲームオブジェクト内のオブジェクトをインスタンス化して、それらをその一部にするのと同じくらい簡単だったらよかったのにと思います。そのようにする方法はありますか?
何かのようなもの :
class Game1 : Microsoft.Xna.Framework.Game
{
ShowUp myShowUp;
MouseState myMouseState;
...
...
protected override Initialize ()
{
this.Components.Add(this.myShowUp);
}
...
protected override void Update(GameTime gameTime)
{
myMouseState = Mouse.GetState();
if (myMouseState.LeftButton == ButtonState.Pressed)
{
this.myShowUp = new ShowUp(this);
}
base.Update(gameTime);
}
...
}
これはいいでしょう。