Ich versuche, eine SpriteManager
Klasse in XNA zu schreiben , benötige aber Zugriff auf die Game
Variablen. Zum Beispiel Game.Content
wäre die Eigenschaft beim Laden von Texturen sehr hilfreich und Game.GraphicsDevice.Viewport
beim 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 SpriteManager
Klasse 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
. BeispielsweiseEnemyManager
muss 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.EnemyManager
Game.Content
Ich könnte einige Ratschläge gebrauchen, wie dies am besten erreicht werden kann.
Eigentlich 2 # ist nicht so schlecht (Ich gehe davon aus soll Sie unten Guss von
Game
bisGame1
). Sie können den TypGame1
in Ihrem Konstruktor wie folgt erzwingen :Sie könnten sogar eine schöne Immobilie wie diese machen. Es ist immer sicher, vorausgesetzt, der Basiswert
DrawableGameComponent
macht nichts undokumentiertes.Oder wenn Sie extrem anal sein möchten, wenn Sie nicht gießen (und das ist wirklich nicht nötig ), können Sie dies tun:
quelle