GameService без GameComponent?

Допустимо ли в XNA создать GameService для объекта, который не является GameComponent? Я знаю, что GameService предназначен для доступа к GameComponent, но что, если объект, к которому вы пытаетесь предоставить доступ, не нужно обновлять в каждом цикле обновления? Например, у меня есть объект Camera2D, который может вычислить Matrix для SpriteBatch.Begin(). Камера не нуждается в обновлении, так как ее положение, поворот и т. Д. Обновляются кодом игры.

Все, что вам нужно для создания GameService, - это тип и объект-поставщик, поэтому объект-поставщик не должен расширять GameComponent, но приемлем ли это способ делать что-то? Есть ли способ лучше?


person Ben    schedule 06.10.2009    source источник
comment
Из любопытства, где вы взяли этот класс Camera2D?   -  person RCIX    schedule 06.10.2009
comment
Я написал это сам, основываясь на некоторых ссылках из этого вопроса: stackoverflow.com/questions/712296/   -  person Ben    schedule 06.10.2009


Ответы (1)


Сервисы не обязательно должны быть GameComponent. Просто взгляните на GraphicsDeviceManager, это предоставляет IGraphicsDeviceService и не является GameComponent. Контейнер игровых сервисов - это просто способ слабого связывания ваших объектов.

Создайте интерфейс ICamera2D, сделайте так, чтобы ваш класс Camera2D реализовал его, а затем зарегистрируйте экземпляр Camera2D в качестве поставщика услуг для ICamera2D в Game.Services. Затем вы используете этот интерфейс для связи с экземпляром Camera2D в других ваших классах. Это означает, что если в какой-то момент вам нужно перейти на OtherCamera2D, вам нужно только зарегистрировать его вместо экземпляра Camera2D в вашем контейнере служб и не нужно изменять другие классы.

person smack0007    schedule 06.10.2009