Xna LoadContent在我的组件中不起作用

Xna LoadContent在我的组件中不起作用,xna,Xna,由于某些原因,我的组件中没有调用LoadContent方法。 例如,我有一个游戏类,我在其中做: //Game.cs protected override void LoadContent() { editor = new Editor(...); Components.Add(editor); } //Editor.cs public class Editor : DrawableGameComponent{ Game game; public Editor(Game gam

由于某些原因,我的组件中没有调用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();
  }
}
//Game.cs
受保护的覆盖void LoadContent(){
编辑器=新编辑器(…);
组件。添加(编辑器);
}
//Editor.cs
公共类编辑器:DrawableGameComponent{
游戏;
公共编辑器(游戏…):基地(游戏){
这个游戏=游戏;
}
//这个方法永远不会被调用!
受保护的覆盖void LoadContent(){
背景=游戏.Content.Load(“背景”);
base.LoadContent();
}
}
有什么建议吗


编辑:当你记住初始化和加载内容的顺序时,一切都很好

我怀疑您的问题是由于该功能引起的<代码>加载内容由
初始化
调用。您需要检查两件事:

  • 在调用
    base.Initialize()
    之前,确认您正在game.cs中创建并添加可绘制游戏组件。在上面的代码中,您正在Game.cs的
    LoadContent
    函数中创建和添加组件,该函数在
    初始化之后发生
  • 验证
    编辑器中的
    初始化
    函数是否正在调用基本
    初始化
    函数:

    public override void Initialize()
    {
        base.Initialize();
    }
    
  • 查看Nick Gravelyn提供的更多信息。与你的问题特别相关的是,尼克在他的帖子中写道:

  • 首先,您将得到一个初始化调用。这是您通常为游戏放置非图形初始化代码的地方*。您还需要确保调用base.Initialize()。当你这样做时,游戏会做一些事情:
  • 对Components集合中的每个GameComponent调用Initialize
  • 创建图形设备
  • 在游戏中调用LoadContent
  • 为Components集合中的每个DrawableGameComponent调用LoadContent

  • 如果GraphicsDeviceManager在base.Initialize之前未注册,则不会调用LoadContent。以下代码为游戏正确注册了GraphicsDeviceManager

    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
    
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
        }
    
        protected override void Initialize()
        {
            base.Initialize();
        }
    }
    

    谢谢,你让我发现了我的问题。我把答案放在我的问题里了!新链接到非活动博客。非常感谢!!!每个人对这个问题的评论似乎都包括“确保调用base.Initialize()”,但这绝对是一个关键点。我一直在努力解决这个问题,你终于帮了我一把。奇怪的是,你甚至不需要给GraphicsDeviceManager分配什么。您可以神奇地调用
    newgraphicsdevicemanager(this)并且它工作得很好。显然,按原样,您有一个对它的引用的好处,但它似乎只是“单击”并不管如何工作。