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);
}