Estoy tratando de escribir una SpriteManagerclase en XNA, pero necesito acceso a las Gamevariables. Por ejemplo, la Game.Contentpropiedad sería muy útil para cargar texturas y Game.GraphicsDevice.Viewportsería útil para obtener el tamaño de la ventana.
Por ahora, tengo la siguiente clase:
public MainGame : DrawableGameComponent
{
public SpriteManager<Enemy> EnemyManager { get; get; }
public SpriteManager<Powerup> PowerupManager { get; set; }
...
}
Se me ocurren tres formas de acceder a estas variables en la SpriteManagerclase:
Hacer que mi clase de administrador de sprites se derive de
GameComponent. Esto sería ideal, excepto que se usa mi administrador de spritesMainGame, que es aGameComponent.Use
((Game) Game1)para acceder a las variables. Sin embargo, hacer este tipo de reparto es feo y rompe la encapsulación.Pase todo de abajo
MainGame. Por ejemplo,EnemyManagernecesita cargar un tipo de enemigo aleatorio cada vez que genera un enemigo, así que en lugar de cargar las texturasMainGame, pasaEnemyManagerlaGame.Contentpropiedad y deja que maneje la carga de texturas. Sin embargo, no estoy seguro de si esta es la mejor manera de manejar la situación. No puedo poner mi dedo sobre él, pero parece "incorrecto" de alguna manera.
Podría usar algunos consejos sobre la mejor manera de lograr esto.

En realidad, el n. ° 2 no es tan malo (supondré que querías rebajar de
GameaGame1). Puede aplicar el tipo que estáGame1en su constructor de la siguiente manera:Incluso podría hacer una buena propiedad de conveniencia como esta. Siempre será seguro, siempre que el subyacente
DrawableGameComponentno haga nada indocumentado.O si quieres ser extremadamente anal acerca de no lanzar (y realmente no hay necesidad de serlo), puedes hacer esto:
fuente