Nur bestimmte Ressourcen in XNA ablegen?

13

Der ContentManager in XNA 4.0 verfügt nur über eine Unload () - Methode, mit der alle Assets entladen werden.

Ich möchte einige "globale" Assets haben, die immer geladen sind, aber dann möchte ich Assets pro Ebene, die entladen werden sollen, wenn die Ebene geändert wird.

Soll ich eine zweite Instanz von ContentManager als Teil der Level.cs-Klasse erstellen? Oder sollte ich Game.Content verwenden und dann .Dispose für die Assets aufrufen, die ich lade? Oder sollte ich meinen eigenen ContentManager über der ReadAsset-Funktion erstellen, wie hier beschrieben ?

Michael Stum
quelle

Antworten:

12

Erstellen Sie eine zweite Instanz von ContentManager.

Sie sollten niemals Dispose() Dinge aus einem ContentManager laden (unter Verwendung der Standardimplementierung), da diese Instanzen gemeinsam genutzt und wiederverwendet werden.

Das Erstellen einer eigenen Version von ContentManager ist rechtwinklig. In beiden Fällen erstellen Sie eine zweite Instanz von ContentManager (oder eine davon abgeleitete Klasse). Wenn die vorhandene Implementierung zu Ihren Zwecken passt, verwenden Sie sie, andernfalls überschreiben Sie, was Sie ändern möchten.

Wenn Ihr Spiel relativ klein ist, spielt es natürlich keine Rolle, wenn Sie nur den einen ContentManager verwenden und sich nicht die Mühe machen, Inhalte zwischen den Ebenen zu entladen.

Andrew Russell
quelle
5
+1 und eine Erinnerung an mich selbst, wenn das nächste Mal jemand versucht, mir zu sagen, wie gut das Singleton-Muster für Asset Manager ist.
Ich habe auch die Game State Management-Demo auf der XNA-Website gefunden, die genau diese verwendet (1 globaler Inhaltsmanager und ein zweiter auf Bildschirmen, die sie benötigen). Nicht sehr intuitiv, aber es wird funktionieren :)
Michael Stum