4

何らかの理由で、コンポーネントで LoadContent メソッドが呼び出されません。たとえば、私が行う Game クラスがあります。

//Game.cs
protected override void LoadContent() {
  editor = new Editor(...);
  Components.Add(editor);
}

//Editor.cs
public class Editor : DrawableGameComponent{
  Game game;
  public Editor(Game game, ...):base(game){
     this.game = game;
  }

  //THIS method never gets called!
  protected override void LoadContent() {
          background = game.Content.Load<Texture2D>("background");
          base.LoadContent();
  }
}

任意のヒント?

編集: Initialize と LoadContent の順序を覚えておくと、すべてうまくいきます!

4

2 に答える 2

14

初期化機能 が原因と思われます。LoadContentによって呼び出されInitializeます。チェックする必要がある2つのことがあります:

  1. が呼び出される前に、Game.csで描画可能なゲームコンポーネントを作成して追加していることを確認してくださいbase.Initialize()LoadContent上記のコードでは、Game.csの関数でコンポーネントを作成して追加しています。これは、の後に発生しInitializeます。
  2. Initializeクラス内の関数が基本関数Editorを呼び出していることを確認します。Initialize

    public override void Initialize()
    {
        base.Initialize();
    }
    

詳細については、NickGravelynによるこのブログ投稿を確認してください。あなたの質問に特に関連して、ニックは彼の投稿で次のように書いています:

  1. まず、Initializeの呼び出しがあります。これは通常、ゲームの非グラフィカル初期化コードを配置する場所です*。また、base.Initialize()を呼び出すことも確認する必要があります。あなたがそうするとき、ゲームはいくつかのことをします:
    1. Componentsコレクション内の各GameComponentでInitializeを呼び出します。
    2. GraphicsDeviceを作成します。
    3. ゲームでLoadContentを呼び出します。
    4. Componentsコレクション内の各DrawableGameComponentに対してLoadContentを呼び出します。
于 2009-04-13T05:23:23.107 に答える
4

base.Initialize が呼び出される前に GraphicsDeviceManager が登録されていない場合、LoadContent は呼び出されません。次のコードは、ゲームの GraphicsDeviceManager を正しく登録します。

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
    }

    protected override void Initialize()
    {
        base.Initialize();
    }
}
于 2010-12-28T14:50:14.000 に答える