Tudo bem, formulado dessa maneira, tenho certeza que parece obscuro, mas farei o possível para descrever meu problema.
Primeiro, deixe-me explicar o que há de errado com meu código-fonte real.
Estou fazendo um jogo de plataformas, e aqui estão os componentes atuais do meu jogo: um Level , que contém sua própria grade de peças e também as folhas de peças e uma peça , que apenas mantém o nome da sua peça e o índice dentro do folha de azulejo. Tudo isso está em um projeto de jogo XNA separado, chamado GameLib.
Aqui está como meus níveis são formatados em um arquivo de texto:
x x . . . . .
. . . b g r .
. . . . . . .
X X X X X X X
Onde .
representa um bloco vazio, b
representa uma plataforma azul, X
representa um bloco com uma cor aleatória etc.
Em vez de fazer todo o trabalho de carregar um nível na classe Level , decidi aproveitar a extensão do pipeline de conteúdo e criar um LevelContentPipelineExtension.
Assim que comecei, percebi rapidamente que não queria codificar mais de 20 linhas do tipo:
if (symbol == 'b')
return new Tile(/*...*/);
Portanto, na esperança de pelo menos centralizar toda a criação de conteúdo em uma classe, criei uma classe estática, chamada LevelContentCreation , que contém as informações sobre qual símbolo cria o que e todo esse tipo de coisa. Ele também contém uma lista de todos os caminhos de ativos das folhas de mosaico, para carregá-los posteriormente. Esta classe está dentro do meu projeto de biblioteca de jogos GameLib.
O problema é que estou usando essa classe estática LevelContentCreation na minha classe Level (para carregar as folhas de bloco reais) e na extensão do pipeline de conteúdo (para saber qual símbolo representa qual bloco) ...
E aqui está como minha classe LevelContentCreation se parece:
public static class LevelContentCreation
{
private static Dictionary<char, TileCreationInfo> AvailableTiles =
CreateAvailableTiles();
private static List<string> AvailableTileSheets { get; set; }
/* ... rest of the class */
}
Agora, como a classe LevelContentCreation faz parte da biblioteca de jogos, a extensão do pipeline de conteúdo tenta usá-lo, mas a chamada para CreateAvailableTiles () nunca acontece e não consigo carregar um objeto Level do pipeline de conteúdo.
Eu sei que isso ocorre porque o pipeline de conteúdo é executado antes da compilação real ou algo parecido, mas como posso corrigir o problema?
Não consigo mover o LevelContentCreation classe para a extensão do pipeline, porque a classe Level não seria capaz de usá-lo ... Estou muito perdida e não sei o que fazer ... Eu sei disso são decisões de design muito ruins, e eu gostaria que alguém pudesse me apontar na direção certa.
Obrigado pelo seu precioso tempo.
Se alguma coisa não estiver clara o suficiente ou se devo fornecer mais informações / código, deixe um comentário abaixo.
Um pouco mais de informação sobre meus projetos:
- Jogo - projeto de jogo do XNA Windows. Contém referências a: Engine, GameLib e GameContent
- GameLib - projeto de biblioteca de jogos XNA. Contém referências a: Mecanismo
- GameContent - projeto de conteúdo XNA. Contém referências a: LevelContentPipelineExtension
- Engine - projeto da biblioteca de jogos XNA. Sem referências.
- LevelContentPipelineExtension - extensão de pipeline de conteúdo XNA. Contém referências a: Engine e GameLib
Não sei quase nada sobre o XNA 4.0 e estou um pouco perdido sobre como o conteúdo funciona agora. Se precisar de mais informações, me diga.