Descartando apenas determinados recursos no XNA?

13

O ContentManager no XNA 4.0 possui apenas um método Unload () que descarrega todos os ativos.

Quero ter alguns ativos "globais" sempre carregados, mas quero ativos por nível que devem ser descarregados quando o nível for alterado.

Devo criar uma segunda instância do ContentManager como parte da classe Level.cs? Ou devo usar Game.Content e chamar .Dispose nos ativos que carrego? Ou devo criar meu próprio ContentManager sobre a função ReadAsset, conforme descrito aqui ?

Michael Stum
fonte

Respostas:

12

Crie uma segunda instância de ContentManager.

Você nunca deve Dispose()carregar o conteúdo de um ContentManager (usando a implementação padrão), pois essas instâncias são compartilhadas e reutilizadas.

Criar sua própria versão do ContentManager é meio ortogonal. De qualquer forma, você criará uma segunda instância do ContentManager (ou uma classe derivada dele). Portanto, se a implementação existente atender às suas finalidades - use-a, caso contrário, substitua o que você deseja alterar.

Obviamente, se o seu jogo for relativamente pequeno - não será realmente importante se você apenas usar o ContentManager e não se importar em descarregar o conteúdo entre os níveis.

Andrew Russell
fonte
5
+1 e um lembrete para mim mesmo para vincular aqui na próxima vez que alguém tentar me dizer o quão bom é o padrão de singleton para os gerentes de ativos.
Também encontrei a demonstração do Game State Management no site da XNA, que usa exatamente isso (1 gerenciador de conteúdo global e 2º nas telas necessárias). Não é muito intuitivo, mas ele vai fazer :)
Michael Stum