Ich fange an, XNA zu lernen und es läuft reibungslos. Ich frage mich jedoch, ob ich mir selbst in den Fuß schieße, indem ich 3.1 und nicht 4.0 lerne.
Ich bin mir auch bewusst, dass Microsoft offensichtlich einen Interessenkonflikt in dieser Angelegenheit hat: Je öfter wir aktualisieren, desto mehr Kopien von Visual Studio werden verkauft (ich weiß, dass Express kostenlos ist, aber einige werden Profi). Man muss also zwischen den Zeilen der Blogs vom Typ "MASSIVE NEW FEATURES UPGRADE NOW" von MS-Mitarbeitern lesen.
Mir ist bekannt, was neu ist: http://msdn.microsoft.com/en-us/library/bb417503.aspx , und das scheinen hauptsächlich Telefon-, Schnittstellen- und Videofunktionen zu sein, an denen ich nicht so interessiert bin mehr macht das Kern-3D-Zeug.
Der Knackpunkt ist: Ich habe Visual Studio 2008 Professional bereits und möchte VS 2010 nicht erhalten, wenn es in 4.0 kaum Unterschiede in der Spielprogrammierung gibt.
Hat sich die Welt weiterentwickelt? Wird das, was ich in 3.1 lerne, überflüssig?
Es gibt auch Codeunterschiede in Bibliotheken, aber sie sind nicht wesentlich. Viele davon sind hier zu sehen: http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet/ Zum Beispiel dieses, das ich im Vergleich zu Riemers Tut herausfinden musste:
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);
}