Aprendendo XNA 3.1 Vs XNA 4.0

7

Estou começando a aprender XNA e está indo bem. No entanto, gostaria de saber se estou me dando um tiro no pé aprendendo 3.1 e não 4.0?

Também sei que a Microsoft obviamente tem um conflito de interesses: quanto mais vezes atualizamos, mais cópias do Visual Studio elas vendem (eu sei que o Express é gratuito, mas alguns serão profissionais). Portanto, é preciso ler nas entrelinhas dos blogs do tipo "MASSIVE NEW FEATURES UPGRADE NOW" dos funcionários da MS.

Estou ciente do que há de novo: http://msdn.microsoft.com/en-us/library/bb417503.aspx , e que parece ser principalmente telefone, interfaces e recursos de vídeo - dos quais não estou tão interessado - estou mais fazendo o material 3D principal.

O ponto de discórdia é: Eu já tenho o Visual Studio 2008 Professional e não quero obter o VS 2010 se houver pouca diferença na programação do jogo na versão 4.0.

O mundo mudou? O que estou aprendendo no 3.1 será redundante?

Também existem diferenças de código nas bibliotecas, mas elas não são importantes, muitas delas podem ser vistas aqui: http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet/ , por exemplo, este que eu tive que descobrir em comparação com Riemers Tut:

XNA 4.0

 protected override void Draw(GameTime gameTime)
 {
     device.Clear(Color.DarkSlateBlue);

     RasterizerState rs = new RasterizerState();
     rs.CullMode = CullMode.None;
     device.RasterizerState = rs;

     effect.CurrentTechnique = effect.Techniques["ColoredNoShading"];
     effect.Parameters["xView"].SetValue(viewMatrix);
     effect.Parameters["xProjection"].SetValue(projectionMatrix);
     effect.Parameters["xWorld"].SetValue(Matrix.Identity);
     foreach (EffectPass pass in effect.CurrentTechnique.Passes)
     {
         pass.Apply();

         device.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, 1, VertexPositionColor.VertexDeclaration);
     }

     base.Draw(gameTime);
 }

XNA 3.1

protected override void Draw(GameTime gameTime)
{
    device.Clear(Color.DarkSlateBlue);

    device.VertexDeclaration = new VertexDeclaration(device, VertexPositionColor.VertexElements);
    device.RenderState.CullMode = CullMode.None; // TODO only for testing!
    device.RenderState.FillMode = FillMode.Solid;

    effect.CurrentTechnique = effect.Techniques["ColoredNoShading"];
    effect.Parameters["xView"].SetValue(viewMatrix);
    effect.Parameters["xProjection"].SetValue(projectionMatrix);
    effect.Parameters["xWorld"].SetValue(Matrix.Identity);

    effect.Begin();
    foreach (EffectPass pass in effect.CurrentTechnique.Passes)
    {
        pass.Begin();
        device.DrawUserIndexedPrimitives<VertexPositionColor>(PrimitiveType.TriangleList, vertices, 0, 5, indices, 0, indices.Length / 3);
        pass.End();
    }
    effect.End();

    base.Draw(gameTime);
}
markmnl
fonte
Realmente não há muito problema se você está tentando desenvolver para o PC ou XBOX360, mas por que você simplesmente não obtém o VS2010 Express e usa o 4.0?
TravisG 12/06
Há muito pouca diferença.
O pato comunista
A última vez que verifiquei, o MS parou de aceitar aplicativos 3.1.
3Dave
@ David, você pode esclarecer - o que me impede de distribuir um aplicativo 3.1? (existem benefícios: minha base de clientes provavelmente terá .Net 3.5 SP1 que 4.0). Estou dizendo que você quer dizer algo do tipo de mercado de aplicativos XBox - isso não se preocupa, estou apenas aprendendo a escrever jogos apenas no PC por enquanto.
markmnl
11
@ Feanor (desculpe - não consigo digitar tremas) Não há nada para impedi-lo de distribuir um aplicativo 3.1 para Windows; mas, se você deseja enviar um aplicativo XBox ou WP7 para o App Hub (para distribuição do XBox Live), ele deve estar no 4.0+. BTW, VS2010 é IMHO uma ordem de magnitude melhor que 2008; vale a pena dar uma olhada. Você tem acesso a uma assinatura do MSDN?
3Dave

Respostas:

8

Eu recomendo usar o XNA 4.0.

Claro que você provavelmente pode fazer tudo com o 3.1 o que pode fazer com o 4.0, mas ele avançou bastante. Além de suas referências, você também pode dar uma olhada no blog de Shawn Hargreaves, por exemplo, neste post: Quebrando Alterações no XNA Game Studio 4.0 . Ou, basicamente, você pode apenas conferir os meses de março, abril e maio de 2010 em seu blog, eles estão cheios de alterações no XNA 4.0.

Lembre-se também de que, com a versão 3.1, você ficará preso à tecnologia antiga. Eventualmente, você desejará atualizar para o XNA 5/6 para suporte ao DX11 ou qualquer outra coisa. Dependendo do tamanho / complexidade do seu programa até então, pode levar algum tempo para atualizá-lo para 4.0, pois você precisará fazer várias alterações.

Duallity
fonte
Não estou convencido - EddieV223 está certo - o idioma é o mesmo, exceto por algumas chamadas de API bem documentadas - portanto, não levaria muito tempo para converter. Por uma questão de aprendizado, é irrelevante se alguma coisa oculta mudou. (Eu sou um programador experiente, talvez, se eu também estivesse aprendendo a programar, as alterações na API me provocariam - mas esse não é o caso - geralmente posso adivinhar as diferentes chamadas da API antes mesmo de procurá-la).
markmnl
2
Parece estranho para mim que alguém diga a si mesmo "Vou aprender uma versão mais antiga agora, posso apenas atualizar meu código mais tarde". Por que você perderia tempo aprendendo algo antigo, quando precisará atualizar mais tarde para usar o WP7 ou XBox360? O fato de você estar aprendendo XNA atualmente deve ser um incentivo suficiente para não aprender algo agora e ter que reaprender mais tarde.
Jonathan Connell
Sim, mas desde que estou aprendendo por que me preocupar com as nuances de cada versão - aprender programação em 3D no XNA é a mesma versão 3 ou 4, mas chamadas diferentes da API - sem dúvida, em alguns anos, o mesmo pode ser dito para as versões 4 e 5 - você tem para começar em algum lugar e não é perda de tempo, é exatamente o mesmo, exceto por algumas chamadas diferentes da API que, até o momento, são coberturas de açúcar para atalho para certas coisas já possíveis em 3. De qualquer forma, aceitarei a maioria da resposta votada como a resposta, mas continuará aprendendo 3 - essa discussão pode ajudar outras pessoas com o mesmo enigma.
markmnl
2

Para o programador 3.1 e 4 são quase os mesmos. As principais mudanças estão na criação de um dispositivo e spritebatch. E onde está o Content Manager, ele é movido para seu próprio projeto dentro da solução. Tudo o resto é praticamente o mesmo. Essas alterações são apenas algumas linhas de código diferentes. Nos bastidores, embora esteja usando diferentes chamadas de API directx.

Então, para responder à sua pergunta, você não está atirando no próprio pé. O uso do XNA não mudou muito do ponto de vista dos programadores, mesmo nas versões 1.0.

Existem muitas dicas na net para procurar respostas rápidas sobre a conversão de 3.1 - 4.0 como esta http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet / .

EddieV223
fonte
11
Dizer que vale a pena aprender o 3.1 e depois reaprender o 4.0 é uma total falsidade; serve apenas para confundir e faz com que os programadores passem mais tempo aprendendo a mesma coisa.
AttackingHobo
@AttackingHobo não estou convencido - EddieV223 está certo - o idioma é o mesmo, exceto por algumas chamadas de API bem documentadas - portanto, não levaria muito tempo para converter. Por uma questão de aprendizado, é irrelevante se alguma coisa oculta mudou. (Eu sou um programador experiente, talvez, se eu também estivesse aprendendo a programar, as alterações na API me provocariam - mas esse não é o caso - geralmente posso adivinhar as diferentes chamadas da API antes mesmo de pesquisar).
markmnl
O idioma é o mesmo porque é c #. Mas XNA 3 é diferente do XNA 4. A menos que você precisa usar bibliotecas ou motores mais antigos específicas, é um desperdício de tempo para aprender as especificidades do XNA 3 ao invés de aprender diretamente XNA 4.
AttackingHobo
"O XNA 3 é diferente do XNA 4. A menos que você precise usar bibliotecas ou mecanismos específicos mais antigos" - mas não é! as bibliotecas são as mesmas, algumas delas atualizadas um pouco - elas ainda têm os mesmos nomes e muitas vezes os mesmos métodos - pode haver uma maneira ligeiramente diferente de chamá-las / usá-las, o que é fácil de descobrir, como no meu exemplo na pergunta! É certo que pode haver alguns recursos do DirectX10 que eu vou perder - mas, novamente, pelo bem da aprendizagem que pode esperar!
markmnl
3
@ Fëanor "Por uma questão de aprendizado que pode esperar!". Você não quer "perder tempo" baixando e instalando o VS2010 e o XNA 4.0, mas não se importa em perder tempo aprendendo algo que está desatualizado? Strange ...
Jonathan Connell