Я пытаюсь написать SpriteManagerкласс в XNA, но мне нужен доступ к Gameпеременным. Например, Game.Contentсвойство будет очень полезно при загрузке текстур и Game.GraphicsDevice.Viewportпоможет получить размер окна.
На данный момент у меня есть следующий класс:
public MainGame : DrawableGameComponent
{
public SpriteManager<Enemy> EnemyManager { get; get; }
public SpriteManager<Powerup> PowerupManager { get; set; }
...
}
Я могу думать о трех способах получения доступа к этим переменным в SpriteManagerклассе:
Сделайте мой класс спрайт-менеджера производным от
GameComponent. Это было бы идеально, за исключением того, что мой менеджер спрайтов используется вMainGame, который являетсяGameComponent.Используйте
((Game) Game1)для доступа к переменным. Однако, выполнение этого вида уродства ужасно и нарушает инкапсуляцию.Передайте все от
MainGame. Например,EnemyManagerнеобходимо загрузить случайный противник типа каждый раз , когда он порождает противника, поэтому вместо загрузки текстур вMainGame, передатьEnemyManagerвGame.Contentсобственность и позволить ей обрабатывать текстуры нагрузку. Однако я не уверен, что это лучший способ справиться с ситуацией. Я не могу положить на нее палец, но в некотором смысле это кажется «неправильным».
Я мог бы воспользоваться некоторыми советами о лучшем способе достижения этого.