4

由于某种原因,我的组件中没有调用 LoadContent 方法。例如,我有我做的游戏类:

//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

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

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

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

查看Nick Gravelyn 的这篇博文了解更多信息。与您的问题特别相关,尼克在他的帖子中写道:

  1. 首先,您将接到 Initialize 的调用。这是您通常为游戏放置非图形初始化代码的地方*。您还需要确保调用 base.Initialize()。当你这样做时,游戏会做一些事情:
    1. 对 Components 集合中的每个 GameComponent 调用 Initialize。
    2. 创建图形设备。
    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 回答