LoadContent не работает в моих компонентах - PullRequest
4 голосов
/ 13 апреля 2009

По какой-то причине метод 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();
  }
}

Какие-нибудь советы?

РЕДАКТИРОВАТЬ: если вы помните порядок инициализации и LoadContent, все работает отлично!

Ответы [ 2 ]

14 голосов
/ 13 апреля 2009

Я подозреваю, что ваша проблема связана с функцией Initialize . LoadContent называется Initialize. Есть две вещи, которые нужно проверить:

  1. Убедитесь, что вы создаете и добавляете свой нарисованный игровой компонент в Game.cs до вызова base.Initialize(). В приведенном выше коде вы создаете и добавляете компонент в функцию LoadContent файла Game.cs, которая происходит после Initialize.
  2. Убедитесь, что функция Initialize в вашем классе Editor вызывает базовую функцию Initialize:

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

Проверьте это сообщение в блоге Ника Грэйвлина для получения дополнительной информации. Особенно относящийся к вашему вопросу, Ник в своем посте пишет, что:

  1. Сначала вам позвонят в Initialize. Здесь вы обычно помещаете неграфический код инициализации для вашей игры *. Вы также должны убедиться, что вы вызываете base.Initialize (). Когда вы делаете, игра делает несколько вещей:
    1. Вызовы инициализации для каждого GameComponent в коллекции компонентов.
    2. Создает графическое устройство.
    3. Вызывает LoadContent для игры.
    4. Вызывает LoadContent для каждого DrawableGameComponent в коллекции компонентов.
4 голосов
/ 28 декабря 2010

LoadContent не будет вызываться, если GraphicsDeviceManager не был зарегистрирован до вызова base.Initialize. Следующий код правильно регистрирует GraphicsDeviceManager для игры.

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

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

    protected override void Initialize()
    {
        base.Initialize();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...