Ich versuche, eine SpriteManagerKlasse in XNA zu schreiben , benötige aber Zugriff auf die GameVariablen. Zum Beispiel Game.Contentwäre die Eigenschaft beim Laden von Texturen sehr hilfreich und Game.GraphicsDevice.Viewportbeim Abrufen der Fenstergröße.
Im Moment habe ich folgende Klasse:
public MainGame : DrawableGameComponent
{
public SpriteManager<Enemy> EnemyManager { get; get; }
public SpriteManager<Powerup> PowerupManager { get; set; }
...
}
Ich kann mir drei Möglichkeiten vorstellen, um Zugriff auf diese Variablen in der SpriteManagerKlasse zu erhalten:
Lassen Sie meine Sprite-Manager-Klasse ableiten
GameComponent. Dies wäre ideal, außer dass mein Sprite-Manager in verwendet wirdMainGame, was a istGameComponent.Verwenden Sie
((Game) Game1)diese Option, um auf die Variablen zuzugreifen. Diese Art der Besetzung ist jedoch hässlich und unterbricht die Kapselung.Gib alles weiter von
MainGame. BeispielsweiseEnemyManagermuss jedes Mal, wenn ein Feind erzeugt wird, ein zufälliger Feindtyp geladen werden. Übergeben Sie also die Eigenschaft , anstatt die Texturen zu ladenMainGame, und lassen Sie sie das Laden der Textur übernehmen. Ich bin mir jedoch nicht sicher, ob dies der beste Weg ist, mit der Situation umzugehen. Ich kann meinen Finger nicht darauf legen, aber es scheint irgendwie "falsch" zu sein.EnemyManagerGame.Content
Ich könnte einige Ratschläge gebrauchen, wie dies am besten erreicht werden kann.