Jogo XNA 4 para ambos os perfis

7

Estou escrevendo jogo no XNA 4 e esta versão tem dois perfis de alta definição e alcance. Meu problema é que preciso ter meu código de jogo para cada um desses perfis e é muito desconfortável ter dois projetos e fazer todas as alterações nos dois. Minha ideia era usar a diretiva pré-processador (não sei o nome disso, http://msdn.microsoft.com/en-us/library/ed8yd1ha%28v=vs.71%29.aspx ) e use a instrução IF em lugares com problemas com o perfil. Há apenas um problema em que o programa precisa ser compilado duas vezes (para cada perfil) e as configurações de diretiva e projeto alteradas manualmente para outro perfil. E minhas perguntas são: Isso é bom? Existe maneira melhor e mais limpa de como fazer isso?

Vodáček
fonte
Apenas para constar: aqui estão as diferenças entre o Reach e o HiDef, de acordo com Shawn Hargreaves.
Doppelgreener
Apenas isole seu código de exibição e use algum tipo de padrão de design, como estratégia ou fábrica, para criar objetos, dependendo do alcance ou do hidef. O restante do seu código deve ser o mesmo.
ashes999

Respostas:

5

Eu consegui isso funcionando, mas você precisa usar alguma mágica do MSBuild para fazer isso. Eu recomendo fortemente que você faça backup do seu projeto, pois você pode facilmente quebrar algo se fizer isso errado.

Primeiramente, você precisa abrir o gerenciador de configuração ( ALT + B + O).

Então você precisa criar quatro configurações de compilação para o seu projeto de jogo. Eu escolhi para citar o meu DebugReach, ReleaseReach, DebugHiDefe ReleaseHiDef.

Depois de fazer isso, salve o projeto, clique com o botão direito do mouse no projeto no gerenciador de soluções e clique em Unload Project. Agora, clique com o botão direito do mouse no projeto novamente e clique em Edit <projectname>.csproj. Essa é a configuração bruta do MSBuild do seu projeto.

No primeiro PropertyGroupnó, você precisa encontrar o nó filho XnaProfileann e excluir a linha. Em seguida, você precisa encontrar os PropertyGroupnós parecidos com este:

  • <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'DebugReach|x86' ">
  • <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseReach|x86' ">
  • <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugHiDef|x86'">
  • <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'ReleaseHiDef|x86'">

Em DebugReache ReleaseReachvocê adiciona o seguinte nó:

  • <XnaProfile>Reach</XnaProfile>

Em DebugHiDefe ReleaseHiDefvocê adiciona o seguinte nó:

  • <XnaProfile>HiDef</XnaProfile>

Depois disso, salve o arquivo, feche-o, clique com o botão direito do mouse no projeto e clique em recarregar. Agora, dependendo da configuração de compilação usada, você usará Debug ou HiDef. Observe que a abertura Properties não reflete a diferença, mas você pode testá-la quando criar.

William Mariager
fonte