Как правильно обрабатывать загрузку нескольких материалов в методе / функции LoadContent ()? - PullRequest
1 голос
/ 15 марта 2012

Так что я знаю, что плохо загружать контент при вызовах конструктора, но нормально ли вызывать функцию .load для класса из LoadContent ()?напр.

protected override void LoadContent()
{
    spriteBatch = new SpriteBatch(GraphicsDevice);
    viewport = graphics.GraphicsDevice.Viewport;
    player1.load(spriteBatch, Content);
}

В пределах .load у меня будет Texture2D playerT = Content.Load<Texture2D>("player");

Это нормально?или каков наилучший способ обработки нескольких материалов, которые необходимо загрузить?

Ответы [ 2 ]

2 голосов
/ 16 марта 2012

Относительно «множественного контента»:

Подкласс класса Game наследует объект ContentManager с именем Content.

Однако вы не ограничены только этим ContentManager объектом (фактически вам даже не нужно его использовать). Вы можете сделать столько, сколько вам нужно, и положить их куда угодно. Это один из способов обработки разного контента на разных «экранах» и т. Д., Так что вы можете загружать и выгружать нужные вам фрагменты.

Чтобы настроить другой менеджер контента на другом экране, вы можете сделать следующее:

В каком-нибудь классе создайте переменную:

ContentManager moreContent;

Затем инициализируйте его следующим образом:

moreContent = new ContentManager(game.Services);
moreContent.RootDirectory = game.Content.RootDirectory;

Вам нужно будет передать свой объект Game в класс, чтобы правильно его инициализировать. Это заставит этого менеджера контента иметь ту же корневую папку, что и родительский Game.Content. Конечно, вы можете изменить это на что угодно.

Теперь только для этого экрана вы можете делать такие вещи, как:

Texture2D playerT = moreContent.Load<Texture2D>("player");

А потом, если вы переключаете экраны (на Update):

moreContent.Unload();

удалит все содержимое экрана из памяти.

2 голосов
/ 15 марта 2012

Проблема с загрузкой вещей в вызове конструктора состоит в том, что вы, вероятно, захотите время от времени выгружать контент, чтобы сэкономить память, но сохраняйте экземпляр класса таким образом, чтобы класс был готов к повторному использованию, просто вызвав load ().Таким образом, загрузка в любое время после инициализации класса Game - это нормально, и ее следует выполнять, основываясь на том, когда требуется контент, а не соглашение о дизайне.

Так что в любое время после Game.Init все в порядке.И если классу плеера нужен контент сразу же, лучше всего сделать это с помощью load внутри LoadContent ().

...