Я пытаюсь написать 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
собственность и позволить ей обрабатывать текстуры нагрузку. Однако я не уверен, что это лучший способ справиться с ситуацией. Я не могу положить на нее палец, но в некотором смысле это кажется «неправильным».
Я мог бы воспользоваться некоторыми советами о лучшем способе достижения этого.