Проблема создания экземпляра XNA SpriteBatch - PullRequest
0 голосов
/ 26 декабря 2010

Я практиковал определенные техники в XNA и недавно столкнулся с проблемой, которая меня просто смущает. Я использовал эту технику для нескольких моих игровых проектов Windows, и теперь внезапно возникает проблема, я думаю, что что-то упускаю из виду ...

Итак, я создал новый игровой проект Windows и добавил в проект игровой компонент XNA, добавил компонент в файл Game1.cs. Создал и создал экземпляр переменной SpriteBatch в Компоненте, затем попытался нарисовать простую текстуру для проверки spriteBatch.

Вот изображение ошибки времени выполнения, которую я получаю: http://twitpic.com/3jp8t1 ... и полный источник двух файлов: pastebin.com/rFRkGKXJ

1 Ответ

1 голос
/ 26 декабря 2010

От макушки головы (вы можете перепроверить меня, используя Reflector), порядок вызовов во время инициализации XNA таков:

  • Initialize() в вашем игровом классе
  • LoadContent() в вашей игре компонентов (вызывается с Game.Initialize)
  • LoadContent() в вашем игровом классе (вызывается с Game.Initialize)
  • Обновление и отрисовка звонков

(Кстати, это далеко не полный список.)

Поэтому я бы предположил, что, добавляя игровой компонент в функцию LoadContent вашей игры, LoadContent в вашем игровом компоненте не вызывается, поэтому его SpriteBatch не создается. Вы можете проверить это, добавив точку останова в функцию LoadContent вашего игрового компонента.

Как правило, вы хотите создавать и добавлять свои игровые компоненты в функцию Initialize вашей игры.

(Также вам следует и, возможно, нужно, вызвать соответствующие функции base в LoadContent и UnloadContent.)

Лично я предпочитаю избегать использования DrawableGameComponent и просто делать свой собственный отдельный класс. Это позволяет мне делиться экземплярами SpriteBatch более напрямую (вместо того, чтобы создавать экземпляры для каждого компонента), и позволяет мне более явно контролировать порядок вызова объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...