Estou tentando escrever uma SpriteManager
classe no XNA, mas preciso acessar as Game
variáveis. Por exemplo, a Game.Content
propriedade seria muito útil para carregar texturas e Game.GraphicsDevice.Viewport
para obter o tamanho da janela.
Por enquanto, tenho a seguinte classe:
public MainGame : DrawableGameComponent
{
public SpriteManager<Enemy> EnemyManager { get; get; }
public SpriteManager<Powerup> PowerupManager { get; set; }
...
}
Eu posso pensar em três maneiras de obter acesso a essas variáveis na SpriteManager
classe:
Faça minha classe de gerente de sprite derivar
GameComponent
. Isso seria ideal, exceto que meu gerente de sprite é usadoMainGame
, que é aGameComponent
.Use
((Game) Game1)
para acessar as variáveis. No entanto, fazer esse tipo de elenco é feio e quebra o encapsulamento.Passe tudo para baixo
MainGame
. Por exemplo,EnemyManager
precisa carregar um tipo de inimigo aleatório toda vez que gera um inimigo; portanto, em vez de carregar as texturasMainGame
, passeEnemyManager
aGame.Content
propriedade e deixe-a lidar com o carregamento de textura. No entanto, não tenho certeza se essa é a melhor maneira de lidar com a situação. Não consigo colocar meu dedo nele, mas parece 'errado' de alguma forma.
Eu poderia usar alguns conselhos sobre a melhor maneira de conseguir isso.
Na verdade, o número 2 não é tão ruim (presumo que você pretendia fazer o down-cast de
Game
paraGame1
). Você pode impor o tipo que estáGame1
no seu construtor da seguinte maneira:Você pode até fazer uma propriedade de conveniência agradável como esta. Sempre será seguro, desde que o subjacente
DrawableGameComponent
não faça nada indocumentado.Ou se você quiser ser extremamente anal sobre não transmitir (e realmente não há necessidade ), você pode fazer o seguinte:
fonte