Когда загружать текстуры? - PullRequest
       18

Когда загружать текстуры?

3 голосов
/ 08 октября 2010

В настоящее время я работаю над парой проектов для Windows Phone (хотя вопрос также может касаться iphone / android), и это заставило меня задуматься, когда лучше всего загружать текстуры из менеджера контента.

Сначала я загружал их все из базового класса Game и передавал их по мере необходимости. Быстро надоедая этим, я создал небольшой класс менеджера ресурсов, который я раздаю всем, кто в этом нуждается.

Так что я думаю, что, возможно, лучше всего, чтобы я на самом деле загружал текстуру, когда класс требует ее, а затем назначал ее переменной, поэтому, когда мне это понадобится снова - все будет готово к работе. .. это лучший способ (эффективный?, самый быстрый?) для обработки загрузки ресурсов? Если нет, то как бы вы посоветовали мне заняться этим?

1 Ответ

7 голосов
/ 08 октября 2010

Не создавайте никаких классов «менеджера ресурсов». Просто передайте класс XNA ContentManager (экземпляр, полученный из Game.Content).

Менеджер контента по умолчанию автоматически обработает для вас повторно загруженные объекты. Таким образом, вы можете Content.Load<Texture2D>("something") из нескольких мест, и вы всегда получите обратно тот же экземпляр текстуры.

Так что, если у вас есть набор классов для ваших игровых объектов, со стандартным дизайном предоставления каждому методу Update и Draw, который вы вызываете из соответствующих методов в Game - просто добавьте другой метод: LoadContent для тех классов, которые принимают аргумент ContentManager.

Вы можете вызвать этот метод из метода LoadContent вашей игры.

Если позже вы захотите внедрить какую-то систему загрузки с задержкой (например, загрузку контента при смене уровней), вы также можете вызвать метод LoadContent ваших игровых классов из метода Update вашей игры. (но имейте в виду, что загрузка контента идет медленно - так что вы можете вызвать экран «загрузки»).

Выгрузка контента немного сложнее. Все, что вы создаете сами, вы должны разгрузить. Но все, что загружено из ContentManager (поскольку экземпляры являются общими), должно выгружаться только этим менеджером контента (Game будет обрабатывать выгрузку его члена Content, когда это необходимо). Вы можете найти это сообщение в блоге достойное прочтения.

...