¿Desechando solo ciertos recursos en XNA?

13

ContentManager en XNA 4.0 solo tiene un método Unload () que descarga todos los activos.

Quiero tener algunos activos "globales" que siempre se cargan, pero luego quiero activos por nivel que deben descargarse cuando se cambia el nivel.

¿Debo crear una segunda instancia de ContentManager como parte de la clase Level.cs? ¿O debería usar Game.Content y luego llamar a .Dispose en los activos que cargo? ¿O debería crear mi propio ContentManager sobre la función ReadAsset como se describe aquí ?

Michael Stum
fuente

Respuestas:

12

Crea una segunda instancia de ContentManager.

Usted debe nunca más Dispose() de las cosas que cargar desde un ContentManager (utilizando la aplicación por defecto), ya que estos casos son compartidos y reutilizados.

Crear tu propia versión de ContentManager es algo ortogonal. De cualquier manera, creará una segunda instancia de ContentManager (o una clase derivada de él). Entonces, si la implementación existente se adapta a sus propósitos, úsela, de lo contrario, anule lo que desea cambiar.

Por supuesto, si su juego es relativamente pequeño, entonces realmente no importará si solo usa el ContentManager y no se molesta en descargar contenido entre niveles.

Andrew Russell
fuente
55
+1 y un recordatorio para mí para vincular aquí la próxima vez que alguien intente decirme qué tan bueno es el patrón singleton para los administradores de activos.
También encontré la demostración de Game State Management en el sitio web de XNA que usa exactamente esto (1 Global Content Manager y un segundo en las pantallas que lo necesitan). No es muy intuitivo, pero funcionará :)
Michael Stum