J'essaie d'écrire une SpriteManager
classe en XNA, mais j'ai besoin d'accéder aux Game
variables. Par exemple, la Game.Content
propriété serait très utile pour charger des textures et Game.GraphicsDevice.Viewport
serait utile pour obtenir la taille de la fenêtre.
Pour l'instant, j'ai la classe suivante:
public MainGame : DrawableGameComponent
{
public SpriteManager<Enemy> EnemyManager { get; get; }
public SpriteManager<Powerup> PowerupManager { get; set; }
...
}
Je peux penser à trois façons d'accéder à ces variables dans la SpriteManager
classe:
Faire dériver ma classe de gestionnaire de sprites
GameComponent
. Ce serait idéal, sauf que mon gestionnaire de sprites est utilisé dansMainGame
, qui est unGameComponent
.Utilisez
((Game) Game1)
pour accéder aux variables. Cependant, faire ce genre de distribution est moche et rompt l'encapsulation.Transmettez tout de
MainGame
. Par exemple,EnemyManager
doit charger un type d'ennemi aléatoire chaque fois qu'il engendre un ennemi, donc au lieu de charger les texturesMainGame
, passezEnemyManager
laGame.Content
propriété et laissez-la gérer le chargement de texture. Cependant, je ne sais pas si c'est la meilleure façon de gérer la situation. Je ne peux pas placer mon doigt dessus, mais cela semble juste «faux» d'une certaine manière.
Je pourrais utiliser quelques conseils sur la meilleure façon d'y parvenir.
En fait, le n ° 2 n'est pas si mal (je suppose que vous vouliez down-cast de
Game
àGame1
). Vous pouvez appliquer le type étantGame1
dans votre constructeur comme ceci:Vous pourriez même faire une belle propriété de commodité comme celle-ci. Il sera toujours sûr, à condition que le sous
DrawableGameComponent
- jacent ne fasse rien de non documenté.Ou si vous voulez être extrêmement anal au sujet de ne pas lancer (et il n'y a vraiment pas besoin de l'être), vous pouvez le faire:
la source