Design de nível no jogo com o XNA?

10

Eu estou pensando sobre o design de nível no jogo. Minha situação atual gira em torno do Tiled - eu tenho muitas camadas diferentes com diferentes tipos de objetos (para quem não conhece o Tiled, um objeto nada mais é do que uma coordenada com propriedades arbitrárias atribuídas a ele).

Atualmente, estou recompilando o jogo toda vez que faço uma pequena alteração no meu arquivo de mapa para ver se tudo está posicionado corretamente. Existe uma maneira de eu ter meu jogo recarregar automaticamente o nível se uma alteração no arquivo de mapa for detectada? O XNA permite isso ou a maneira como o pipeline de conteúdo funciona não permite conteúdo dinâmico dessa maneira? Todas as dicas ou sugestões são absolutamente bem-vindas.

Christopher Horenstein
fonte

Respostas:

8

Presumo que seus arquivos de mapa sejam processados ​​pelo Content Pipeline e carregados em tempo de execução com Content.Load. Você tem duas opções:

  • Salve seus mapas como um arquivo XML, via IntermediateSerializer.Serialize. Em tempo de execução, você pode lê-los com IntermediateSerializer.Deserialize para ver as alterações.
  • Essa é mais difícil: chamar o MSBuild em tempo de execução para recompilar seus arquivos nos XNBs adequados e recarregá-los com o ContentManager. Esta amostra faz isso.
r2d2rigo
fonte
Entre os dois, tenho certeza que poderei resolver alguma coisa. Obrigado!
Christopher Horenstein 21/11
2

Você também pode usar o Karvonite se quiser aumentar isso rapidamente.

É uma estrutura de persistência ágil. Não tenho certeza se a nova versão funcionará no windows phone 7 ou xbox.

Você criaria uma definição de persistência com seu editor de persistência (é muito fácil, basta importar o assembly e verificar os campos / propriedades nas classes / estruturas que deseja persistir) Você inicia um ObjectSpace no código e adiciona / remove / obtém objetos dele . (esses objetos são persistentes)

Se você puder criar uma abstração para que o mecanismo de mosaico ou o que você chama, não se importe exatamente como ele obtém o mapa, apenas o que ele solicitou. Depois, você pode voltar e usar o XmlSerializer ou o intermediário. (o que você preferir) Tudo o que você precisa fazer para implementar esses outros serializadores é criar outra implementação da abstração (uma interface ou classe abstrata).

Acho que há um exemplo de como criar conteúdo em tempo de execução no site do clube do criador do XNA. Pode não ser construído com a estrutura mais recente. Dessa forma, você pode manter seu código antigo se já usa o pipeline de conteúdo. Aqui está o link: Winform Series 2: Carregamento de Conteúdo

Michael Coleman
fonte
Sinto-me um pouco tolo ao perguntar isso, mas você pode descrever o que imagina o fluxo de trabalho usando essa estrutura? Parece realmente legal, mas não sei como abordá-lo.
Christopher Horenstein
1
Bem, você define a serialização em seu editor de persistência. (é muito fácil, basta importar o conjunto de objetos e marcar algumas caixas nas estruturas / classes e nos campos / propriedades que você deseja que persistam) Depois de fazer isso, basta inicializar um espaço de objeto que serialize / desserialize seus objetos . É bem arrumado e rápido começar a funcionar.
Michael Coleman #
1
Você também pode olhar para este projeto no codeplex para obter um exemplo melhor de como criar conteúdo fora do visual studio. ( xnadevru.codeplex.com/… )
Michael Coleman