2

DrawableGameComponent「インスタンスクラス」に使えることに気づきました

DrawableGameComponentDraw、などLoadContentの「オーバーライド」が含まれていますUpdate...以下のコードを見てください。

これはGame1のクラスです。

 public class Game1 : Microsoft.Xna.Framework.Game
    {

        public Game1()
        {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Contenttt";
        graphics.PreferredBackBufferWidth = GAME_WIDTH;
        graphics.PreferredBackBufferHeight = GAME_HEIGHT;
        }
     }

私の他のクラスのコード:

public class Bullet: DrawableGameComponent //based by DrawableGameComponent
{
    public Bullet(Game1 game): base(game) //set argument for draablegamecomponent

    {
        //do something
    }
}

DrawableGameComponent:

public DrawableGameComponent(ゲームゲーム

パラメータの説明:

ゲーム タイプ:ゲームゲームコンポーネントをアタッチする必要のあるゲーム。**

ご覧のとおり、のパラメータDrawableGameComponentはのクラスです Microsoft.Xna.Framework.GameGame1次に、クラスで埋めます。

これは私の他のクラスのコードであり、私のWorldGame1ではDrawableGameComponent によるオーバーライドに影響を与えます

 protected override void Initialize()
        {
            base.Initialize();            
        }
        protected override void LoadContent()
        {             

        }

        protected override void UnloadContent()
        {
        }

問題は、なぜ自分のクラスでそれらの「オーバーライド」を使用できるのかということです。なぜこれがgame1の世界に影響を与えるのでしょうか?

一方、C#では「ベース」ステートメントは次のようになります

パブリッククラス箇条書き:MyClass

ベースの「インスタンス」クラスにすることはできません。

ただしDrawableGameComponent、インスタンスクラスの場合、パラメータを使用して設定できるため、「overridevoid」は前に配置したパラメータのクラスで機能します。

方法をご存知でしたら、クラスの作り方を教えてください。

4

1 に答える 1

2

メソッドの考え方がわからないようですvirtualoverride基本クラスで定義されたメソッドはとしてマークされているため、メソッドを使用する機能を利用できますvirtual。基本的に、これらはテンプレートメソッドデザインパターンの例です。virtualまたはabstractメソッドを使用すると、サブクラスで実装を変更できます(または、抽象クラスの場合は完全に延期されます)。

public abstract class BaseClass
{
   public void TemplateMethod()
   {
      DoSomething();
      DoSomethingElse();
   }

   protected virtual void DoSomething()
   {
      // implementation that can be changed or extended
   }

   // no implementation; an implementation must be provided in the inheritor
   protected abstract void DoSomethingElse();
}

public sealed class SubClass : BaseClass
{
   protected override DoSomething()
   {
      // add extra implementation before
      base.DoSomething(); // optionally use base class' implementation
      // add extra implementation after
   }

   protected override DoSomethingElse()
   {
      // write an implementation, since one did not exist in the base
   }
}

次に、次のことを実行できます。

SubClass subClass = new SubClass();

// will call the new implementations of DoSomething and DoSomethingElse
subClass.TemplateMethod();

関連項目:

于 2012-12-23T15:29:02.767 に答える