Vous ne disposez que de certaines ressources dans XNA?

13

Le ContentManager dans XNA 4.0 n'a qu'une seule méthode Unload () qui décharge tous les actifs.

Je veux avoir des actifs "globaux" qui sont toujours chargés, mais je veux des actifs par niveau qui doivent être déchargés lorsque le niveau est modifié.

Dois-je créer une seconde instance de ContentManager dans le cadre de la classe Level.cs? Ou dois-je utiliser Game.Content puis appeler .Dispose sur les actifs que je charge? Ou dois-je créer mon propre ContentManager au-dessus de la fonction ReadAsset comme indiqué ici ?

Michael Stum
la source

Réponses:

12

Créez une deuxième instance de ContentManager.

Vous ne devriez jamaisDispose() rien charger à partir d'un ContentManager (en utilisant l'implémentation par défaut), car ces instances sont partagées et réutilisées.

Créer votre propre version de ContentManager est un peu orthogonal. Dans tous les cas, vous allez créer une deuxième instance de ContentManager (ou une classe qui en dérive). Donc, si l'implémentation existante convient à vos besoins - utilisez-la, sinon remplacez ce que vous voulez changer.

Bien sûr, si votre jeu est relativement petit - cela n'aura pas vraiment d'importance si vous utilisez simplement un ContentManager et ne vous embêtez pas à décharger du contenu entre les niveaux.

Andrew Russell
la source
5
+1 et un rappel pour moi de créer un lien ici la prochaine fois que quelqu'un essaie de me dire à quel point le modèle singleton est bon pour les gestionnaires d'actifs.
J'ai également trouvé la démo de la gestion de l'état du jeu sur le site Web XNA qui utilise exactement cela (1 gestionnaire de contenu global et un deuxième sur les écrans qui en ont besoin). Pas très intuitif, mais ça suffira :)
Michael Stum