XNAで特定のリソースのみを破棄しますか?


13

XNA 4.0のContentManagerには、すべてのアセットをアンロードするUnload()メソッドが1つしかありません。

常にロードされるいくつかの「グローバル」アセットが必要ですが、レベルが変更されたときにアンロードされるレベルごとのアセットが必要です。

Level.csクラスの一部としてContentManagerの2番目のインスタンスを作成する必要がありますか?または、Game.Contentを使用してから、読み込むアセットで.Disposeを呼び出す必要がありますか?または、ここで概説したように、ReadAsset関数の上に独自のContentManagerを作成する必要がありますか?

回答:


12

の2番目のインスタンスを作成しますContentManager

これらのインスタンスは共有され、再利用されるため、ContentManagerから(デフォルトの実装を使用して)ロードするものは絶対にしない Dispose()でください。

ContentManagerの独自バージョンの作成は、一種の直交です。どちらにしても、ContentManagerの2番目のインスタンス(またはその派生クラス)を作成します。したがって、既存の実装が目的に合っている場合はそれを使用し、そうでない場合は変更したいものをオーバーライドします。

もちろん、ゲームが比較的小さい場合は、レベル間でコンテンツをアンロードせずに、1つのContentManagerを使用するだけでかまいません。


5
+1と、次回に誰かがアセットマネージャーにとってシングルトンパターンがどれほど素晴らしいかを私に話そうとするときに、ここにリンクすることを思い出させてください。

また、XNA WebサイトでGame State Management Demoを見つけました。これはまさにこれを使用します(1つのグローバルコンテンツマネージャーと、それを必要とする画面上の2番目のコンテンツマネージャー)。非常に直感的ではありませんが、実際に機能します:)
マイケルスタム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.