Estive estudando como usar o pipeline de conteúdo XNA adequadamente para um jogo em que estou trabalhando. No entanto, tenho tido dificuldade em entender e não tenho certeza sobre a melhor maneira de proceder.
O exemplo específico é: eu tenho um jogo estilo RPG 2D de baixo para cima. Desejo criar um utilitário (provavelmente Windows Forms) que permita criar e editar mapas facilmente. Cada mapa consiste em 1 ou mais camadas gráficas, cada camada contendo uma grade N x N de blocos. Por sua vez, cada bloco começa como um bitmap.
Dadas as informações acima, vejo algumas maneiras de proceder:
- Armazene as informações do mapa em um arquivo XML compatível com o carregador XML do Content Pipeline. Cada bloco é armazenado como uma referência de sequência ao recurso de textura correspondente. Recursos de textura são adicionados ao projeto do jogo.
- Armazene as informações do mapa em um arquivo XML compatível com o carregador XML do Content Pipeline. Cada bloco é armazenado como o caminho para os arquivos .bmp / .png correspondentes.
Agora, há coisas que eu realmente não gosto nas duas abordagens. O principal problema da abordagem 1 é que a criação do mapa e a criação de ativos de textura .xnb são completamente separadas. O arquivo de mapa .xml é criado pelo utilitário, enquanto o recurso de textura é adicionado ao meu conteúdo no meu jogo. Isso se torna um problema ao tentar garantir que o arquivo de mapa .xml e todos os ativos de textura no projeto permaneçam sincronizados.
A abordagem dois me permitiria manter todo o arquivo de imagem apropriado ao lado dos arquivos de mapa usando o utilitário de mapa. No entanto, parece que eu não deveria ter que fazer algo assim. Além disso, eu precisaria ser mais inteligente sobre o carregamento dos mapas para não carregar rapidamente a mesma imagem do disco para cada bloco.
Portanto, minha pergunta é: se você deseja adicionar um utilitário de geração de conteúdo (como um editor de mapas), qual é a melhor maneira de garantir que o conteúdo personalizado (arquivo de mapa) permaneça sincronizado com os ativos de textura. Além disso, lembre-se de que no meu editor de mapas eu precisaria carregar e exibir os ativos de textura.
Qualquer entrada é muito apreciada.
Coloque todas as imagens de bloco em um único arquivo de imagem e faça referência a elas pelo número do bloco.
Isso será muito mais eficiente e à prova de erros e tem a vantagem de poder configurar seus níveis em um editor de blocos como o Tiled .
fonte
Não tenho 100% de certeza de que sua pergunta ficou clara na minha cabeça, mas tente o seguinte:
Você terá que tornar o editor de mapas líder, não adicione ativos ao seu projeto de conteúdo, exceto um arquivo XML (game.xml ou algo assim). Agora faça com que seu editor de níveis edite o arquivo game.xml adicionando links a outros arquivos. Por exemplo, a criação de um novo nível no seu editor de níveis adiciona a tag
<level rank=5>Content/MyLevel/level5.xml/>
ao seu arquivo XML.Agora, para criar tudo, você precisa escrever uma extensão de pipeline de conteúdo personalizado. (Certifique-se de definir o novo importador e processador no arquivo game.xml em vez do processador XML padrão)
Esse processador percorrerá os arquivos XML e criará todos os ativos chamando os importadores e o processador apropriados. Isso deixará você com tudo bem construído e sem ter que ir e voltar para o projeto de conteúdo e seu editor.
Recursos: http://msdn.microsoft.com/en-us/library/bb447754.aspx
fonte