LoadContent在我的组件中不起作用

时间:2009-04-12 23:37:59

标签: xna

由于某种原因,我的组件中没有调用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的顺序时,一切正常!

2 个答案:

答案 0 :(得分:14)

我怀疑你的麻烦是由于Initialize功能造成的。 LoadContent调用Initialize。您需要检查两件事:

  1. 在调用base.Initialize()之前,验证您是否在Game.cs中创建和添加可绘制游戏组件。在上面的代码中,您将在Game.cs的LoadContent函数中创建和添加组件,该函数发生在Initialize之后。
  2. 验证Initialize类中的Editor函数是否正在调用基本Initialize函数:

    public override void Initialize()
    {
        base.Initialize();
    }
    
  3. 查看Nick Gravelyn的blog post了解更多信息。与你的问题特别相关的是,尼克写道:

    1. 首先,您将接到Initialize的电话。这是您通常为游戏*添加非图形初始化代码的地方。您还需要确保调用base.Initialize()。当你这样做时,游戏会做一些事情:
      1. 调用组件集合中每个GameComponent的初始化。
      2. 创建GraphicsDevice。
      3. 在游戏中调用LoadContent。
      4. 为Components集合中的每个DrawableGameComponent调用LoadContent。

答案 1 :(得分: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();
    }
}