Estoy tratando de escribir una SpriteManager
clase en XNA, pero necesito acceso a las Game
variables. Por ejemplo, la Game.Content
propiedad sería muy útil para cargar texturas y Game.GraphicsDevice.Viewport
serí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 SpriteManager
clase:
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,EnemyManager
necesita cargar un tipo de enemigo aleatorio cada vez que genera un enemigo, así que en lugar de cargar las texturasMainGame
, pasaEnemyManager
laGame.Content
propiedad 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
Game
aGame1
). Puede aplicar el tipo que estáGame1
en su constructor de la siguiente manera:Incluso podría hacer una buena propiedad de conveniencia como esta. Siempre será seguro, siempre que el subyacente
DrawableGameComponent
no haga nada indocumentado.O si quieres ser extremadamente anal acerca de no lanzar (y realmente no hay necesidad de serlo), puedes hacer esto:
fuente