Lernen von XNA 3.1 gegen XNA 4.0

7

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);
}
markmnl
quelle
Es gibt wirklich kein großes Problem, wenn Sie versuchen, für den PC oder die XBOX360 zu entwickeln, aber warum erhalten Sie nicht einfach VS2010 Express und verwenden 4.0?
TravisG
Es gibt sehr wenig Unterschied.
Die kommunistische Ente
Als ich das letzte Mal nachgesehen habe, hat MS die Annahme von 3.1-Apps eingestellt.
3Dave
@ David können Sie klarstellen - was soll mich davon abhalten, eine 3.1-App zu verbreiten? (Es gibt Vorteile: Mein Kundenstamm wird viel wahrscheinlicher .Net 3.5 SP1 als 4.0 haben). Ich meine, Sie meinen eine Art XBox-App-Markt - das ist keine Sorge für mich. Ich lerne gerade, wie man Spiele nur auf dem PC schreibt.
Markmnl
1
@Feanor (Entschuldigung - ich kann keine Umlaute eingeben) Nichts hindert Sie daran, eine 3.1-App für Windows zu vertreiben. Wenn Sie jedoch eine XBox- oder WP7-App an den App Hub (für die XBox Live-Distribution) senden möchten, muss diese Version 4.0+ sein. Übrigens ist VS2010 meiner Meinung nach eine Größenordnung besser als 2008; es ist einen Blick wert. Haben Sie Zugriff auf ein MSDN-Abonnement?
3Dave

Antworten:

8

Ich empfehle XNA 4.0 zu verwenden.

Sicher, Sie können wahrscheinlich alles mit 3.1 machen, was Sie mit 4.0 machen können, aber es ist ziemlich weit fortgeschritten. Zusätzlich zu Ihren Referenzen möchten Sie vielleicht auch einen Blick auf Shawn Hargreaves 'Blog werfen, zum Beispiel in diesem Beitrag: Breaking Changes in XNA Game Studio 4.0 . Oder Sie können sich einfach die Monate März, April und Mai 2010 in seinem Blog ansehen, sie sind voller XNA 4.0-Änderungen.

Denken Sie auch daran, dass Sie mit 3.1 an der alten Technologie festhalten werden. Schließlich möchten Sie ein Upgrade auf XNA 5/6 für DX11-Unterstützung oder was auch immer durchführen. Je nachdem, wie groß / komplex Ihr Programm bis dahin ist, kann es einige Zeit dauern, es auf 4.0 zu aktualisieren, da Sie mehrere Änderungen vornehmen müssen.

Duallität
quelle
Ich bin nicht überzeugt - EddieV223 es richtig - die Sprache ist bis auf ein paar gut dokumentierte API-Aufrufe genauso - würde also keine lange Konvertierung dauern. Zum Lernen ist es unerheblich, ob sich etwas unter der Haube geändert hat. (Ich bin ein erfahrener Programmierer. Wenn ich also lernen würde, auch zu programmieren, würden mich die Änderungen in der API umwerfen - aber das ist nicht der Fall - ich kann normalerweise die verschiedenen API-Aufrufe erraten, bevor ich sie überhaupt nachschlage.)
Markmnl
2
Es scheint mir seltsam, dass sich jemand sagen würde: "Ich werde jetzt eine ältere Version lernen, ich kann meinen Code später einfach aktualisieren." Warum sollten Sie Zeit damit verschwenden, etwas Altes zu lernen, wenn Sie später ein Upgrade für die Nutzung von WP7 oder XBox360 durchführen müssen? Die Tatsache, dass Sie gerade XNA lernen, sollte Anreiz genug sein, jetzt nichts zu lernen und später erneut lernen zu müssen.
Jonathan Connell
Ja, aber da ich lerne, warum ich mich um die Nuancen jeder Version kümmere - das Erlernen der 3D-Programmierung auf XNA ist dieselbe Version 3 oder 4, aber unterschiedliche API-Aufrufe - ohne Zweifel kann in ein paar Jahren dasselbe für Version 4 und 5 gesagt werden - das haben Sie irgendwo anzufangen und es ist keine Zeitverschwendung, es ist genau das gleiche, bis auf wenige verschiedene API-Aufrufe, die so weit von dem, was ich sehen kann, Zuckerbeschichtungen sind, um bestimmte Dinge zu verkürzen, die bereits in 3 möglich sind. Wie auch immer, ich werde die mehrheitlich gewählte Antwort als nehmen Die Antwort wird aber weiter lernen 3 - diese Diskussion kann anderen mit dem gleichen Rätsel helfen.
Markmnl
2

Für den Programmierer sind 3.1 und 4 nahezu gleich. Die wichtigsten Änderungen sind das Erstellen eines Geräts und eines Spritebatches. Und wo sich der Content Manager befindet, wird er in ein eigenes Projekt innerhalb der Lösung verschoben. Alles andere ist ziemlich gleich. Diese Änderungen unterscheiden sich nur um wenige Codezeilen. Hinter den Kulissen werden jedoch verschiedene DirectX-API-Aufrufe verwendet.

Um Ihre Frage zu beantworten, schießen Sie sich überhaupt nicht in den Fuß. Die Verwendung von XNA hat sich aus Sicht der Programmierer selbst in den 1.0-Versionen nicht wesentlich geändert.

Es gibt viele Spickzettel im Internet, in denen Sie nach schnellen Antworten zum Konvertieren von 3.1 - 4.0 wie diesem suchen können. Http://www.nelxon.com/blog/xna-3-1-to-xna-4-0-cheatsheet / .

EddieV223
quelle
1
Zu sagen, dass es sich lohnt, 3.1 zu lernen und dann 4.0 neu zu lernen, ist eine völlige Lüge. Es wird nur dazu dienen, zu verwirren und die Programmierer dazu zu bringen, mehr Zeit damit zu verbringen, dasselbe zu lernen.
AttackingHobo
@AttackingHobo Ich bin nicht überzeugt - EddieV223 es richtig - die Sprache ist bis auf ein paar gut dokumentierte API-Aufrufe genauso - würde also keine lange Konvertierung dauern. Zum Lernen ist es unerheblich, ob sich etwas unter der Haube geändert hat. (Ich bin ein erfahrener Programmierer. Wenn ich also lernen würde, auch zu programmieren, würden mich die Änderungen in der API umwerfen - aber das ist nicht der Fall - ich kann normalerweise die verschiedenen API-Aufrufe erraten, bevor ich sie überhaupt nachschlage.)
Markmnl
Die Sprache ist die gleiche, weil es C # ist. XNA 3 unterscheidet sich jedoch von XNA 4. Sofern Sie keine bestimmten älteren Bibliotheken oder Engines verwenden müssen, ist es Zeitverschwendung, die Besonderheiten von XNA 3 zu lernen, anstatt XNA 4 direkt zu lernen.
AttackingHobo
"XNA 3 unterscheidet sich von XNA 4. Es sei denn, Sie müssen bestimmte ältere Bibliotheken oder Engines verwenden" - aber nicht! Die Bibliotheken sind die gleichen, nur einige von ihnen wurden ein wenig aktualisiert - sie haben immer noch die gleichen Namen und oft die gleichen Methoden - es gibt möglicherweise eine etwas andere Art, sie aufzurufen / zu verwenden, die wie in meinem Beispiel leicht herauszufinden ist in der Frage! Zugegeben, es gibt möglicherweise einige DirectX10-Funktionen, die ich verpassen werde - aber auch hier, um zu lernen, dass es warten kann!
Markmnl
3
@ Fëanor "Um zu lernen, kann das warten!". Sie möchten keine Zeit damit verschwenden, VS2010 und XNA 4.0 herunterzuladen und zu installieren, aber es macht Ihnen nichts aus, Zeit damit zu verschwenden, etwas zu lernen, das veraltet ist? Seltsam ...
Jonathan Connell