Spiele selbst entwickeln mit XNA, Teil 1: Eine Einführung
in-ga.me hat es sich zum Ziel gemacht, die österreichische Spieleentwicklerszene in den Vordergrund zu rücken. Wir wollen, dass das Thema im heimischen Markt mehr Gewicht erhält und wir tragen unseren Teil dazu bei. Viele träumen davon, ein eigenes Spiel zu entwickeln, scheitern aber bereits bei der Auswahl des richtigen Werkzeugs.
in-ga.me wird sich in den nächsten Wochen und Monaten einige ausgewählte Tools ansehen und Einsteigertutorials dazu verfassen. Zielgruppe der Artikelreihe sind Hobby-Programmierer und Anfänger, die den Einstieg in die die Spieleentwicklung machen wollen. Wer nichts wagt, gewinnt auch nichts – daher wird ein gesundes Mindestmaß an Lernbereitschaft für den sinnvollen Genuss der Reihe vorausgesetzt.
Folgende Engines und Tools stehen dabei auf unserer Liste:
- Unity3D bietet ein flexibles, plattformübergreifendes und vor allem einsteigerfreundliches Entwicklungstool.
- Das Unreal Development Kit von Epic Games ist umfangreich und mächtig.
- Mit dem XNA Framework liefert Microsoft ein kostenfreies Toolset für die (Windows) PC, XBox und Windows Phone Entwicklung.
Der Titel dieses Einführungsartikels verrät es schon, wir starten mit dem XNA Framework, welches aktuell in der Version 4.0 aufliegt.
Es muss nicht immer C++ sein
Seit 2006 stellt Microsoft mit dem XNA Framework und dem XNA Game Studio, einer geringfügig adaptierten Visual Studio 2010 Version, angehenden Spieleentwicklern ein umfassendes Set von Werkzeugen zur Verfügung, welches schnelle und vor allem vereinfachte Spieleentwicklung ermöglichen soll. Das Kürzel selbst steht übrigens für “XNA’s Not Acronymed“ und darf als augenzwinkernde Anspielung an die Eigenheit der Technikwelt verstanden werden, Technologien mit teils kryptischen Abkürzungen zu versehen.
Doch was genau ist XNA jetzt eigentlich? Um XNA am besten beschreiben zu können, sollte man wohl damit beginnen, zu definieren, was es nicht ist. XNA ist keine Spieleengine. Eine Spieleengine besteht meistens aus einer umfangreichen Suite an visuellen Editoren, zum Beispiel Level- und Shader-Editoren. Während sowohl Unity3D als auch das UDK diesen Kriterien entsprechen, stehen bei XNA keine derartigen Editoren zur Verfügung. Vielmehr kann man XNA als eine Werkzeugkiste betrachten, welche unter anderem ein spezialisiertes Komponentenmodell und eine Anzahl an Bibliotheken anbietet. Diese haben den Zweck, die gängigsten Prozesse in der Spieleentwicklung wie das Ansteuern der Grafikhardware oder das Abspielen von Sounds zu erleichtern.
Und doch gibt es eine Gemeinsamkeit zwischen Unity3D und dem XNA Framework, und zwar die verwendete Programmiersprache C#. Das XNA Framework basiert auf dem .NET Framework 2.0. Da .NET eine sogenannte “managed” Laufzeitumgebung ist, bedeutet dies auch, dass man sich nicht um die Freigabe von Speicher kümmern muss, was vor allem für Anfänger ein großer Vorteil gegenüber der klassischen Programmierung unter C oder C++ ist.
Wie, was? Spieleentwicklung nicht in C++, ja geht denn das überhaupt? Ja! Dass es nicht immer C++ sein muss, beweisen durchaus kommerziell erfolgreiche Titel wie, unter anderem Bastion, Magicka, Terraria und der Minecraft Vorgänger Infiniminer. Sie alle haben eines gemeinsam – ihr ahnt es jetzt sicher schon: Sie wurden mit dem XNA Framework entwickelt.
Es ist natürlich klar: Kein noch so gut geschriebener C# Code schlägt einen per Hand optimierten C++ Code. Aber wenn man die eine oder andere Optimierungsregel beherzt, kann man durchwegs gute Spiele auch in rein “managed” Code erzeugen.
Das Ziel
Das Ziel der Artikelreihe ist das Erstellen eines einfachen 2D Topdown Shooters. Kommt der Artikel gut an und stimmt die Nachfrage, dann werden wir auch noch einen 2 Spieler Multiplayermodus implementieren. Gesteuert wird der Charakter mit den Pfeiltasten, die Feuerrichtung gibt die Maus vor. Die Gegner sollen in regelmäßigen Abständen am Bildschirmrand spawnen und dann sofort auf uns zustürmen. Um das Spiel spannend zu halten, soll alle paar Runden ein “Spezialgegner” gespawned werden.
XNA, quo vadis?
Eigentlich wollte ich erst im letzten Teil der Artikelreihe darauf Bezug nehmen, aber aus aktuellem Anlass ist es angemessen, das Thema vorzuziehen. Es geht um die unmittelbare Zukunft von XNA und damit einhergehend die Frage, ob es überhaupt Sinn macht, sich dieser Technologie zu widmen. Als Microsoft Windows 8 und die neue Touch-UI Metro ankündigte, fehlte zum Schrecken der Community XNA auf den Slides der unterstützten Technologien. Stattdessen findet man dort Technologien wie HTML5, .NET und XAML sowie C++. Besonders ein Absatz im beigefügten Dokument der Windows 8 Developer Preview liest sich fast schon wie ein offizieller Nachruf:
“Create immersive games using the power of DirectX The new Windows 8 graphics stack is better integrated, making Direct2D, Direct3D, and DirectCompute components easier to use together and requiring fewer duplicated resources than before. Capabilities previously available only in XNA, such as DirectXMath, XAudio2, and XInput, are now available. For the ultimate experience in gaming and video, use DirectX 11.1 to bring stereoscopic 3D to your apps.”
Bald darauf folgte die offizielle Bestätigung: Während XNA zwar im Desktop Modus von Windows 8 unterstützt wird, sieht die Sache für die Metro anders aus. XNA basiert auf DirectX 9, welches auf Metro (DirectX 11.1) nicht unterstützt wird. Dies bedeutet, dass XNA nicht für Metro Spiele verwendet werden kann. Schlimmer noch: Es gibt derzeit auch keine Pläne, eine aktuellere Version von DirectX in XNA zu implementieren.
Bald darauf kündigte auch einer der Lead Developer von XNA, Shawn Hargreaves, seinen Positionswechsel ins WinRT Team an. Allerdings nicht bevor er noch einige der beliebtesten XNA Features, SpriteBatch und BasicEffect, nach C++ portierte (http://blogs.msdn.com/b/shawnhar/archive/2012/03/02/spritebatch-and-basiceffect-for-c-direct3d-11.aspx).
Auch wenn das alles jetzt erstmal auf eine dunkle Zukunft für XNA hinweisen würde, so bleibt es auf Microsoft Plattformen weiterhin unterstützt. Auch an der Stellung des “First Class Citizen” für die Windows Phone Umgebung und die XBox wird sich zumindest in den kommenden Jahren laut offizieller Microsoft Stellungnahme kaum etwas ändern:
“XNA Game Studio remains the premier tool for developing compelling games for both Xbox LIVE Indie Games and Windows Phone 7; more than 70 Xbox LIVE games on Windows Phone and more than 2000 published Xbox LIVE Indie Games have used this technology. While the XNA Game Studio framework will not be compatible with Metro style games, Windows 8 offers game developers the choice to develop games in the language they are most comfortable with and at the complexity level they desire.”
Next Up: Wir tauchen ab!
Im nächsten Artikel ziehen wir die Boxhandschuhe aus und werfen uns wagemutig ins kalte Wasser. Wir wagen dabei tiefe Einblicke in die grundlegende Technik des XNA Frameworks und scheuen auch vor Codezeilen nicht zurück! Was ist ein Game Loop, wie funktioniert das eigentlich und welche Klassen stehen uns zum Erstellen unseres Spiels überhaupt zur Verfügung? Weiters schauen wir uns die mächtige XNA Content Pipeline an und probieren unseren ersten 2D Code unter Zuhilfenahme der SpriteBatch Klasse aus.
Über den Autor
Thomas ist seit zwölf Jahren professioneller Softwareentwickler, seit mindestens 20 Jahren begeisterter Gamer und seit nunmehr drei Jahren widmet er sich in seiner Freizeit der Spielentwicklung. Sein berufsbegleitendes Studium hat er genutzt, um zwei Abschlussarbeiten zum Thema Spieleentwicklung zu schreiben – eine davon ist zur Gänze dem XNA Framework gewidmet. Entstanden ist dabei das Spiel “Refrag”, welches hier ausprobiert werden kann.
Pingback: Article: XNA, Part 1 (German) « urban escapism
16. April 2012 - 12:24
ich freu mich echt schon sehr auf teil 2!
16. April 2012 - 17:27
Ich aber auch
Pingback: Spiele selbst entwickeln, Teil 2: XNA Grundlagen und erste Schritte | in-ga.me
Pingback: Spiele selbst entwickeln mit XNA, Teil 3: Lights, Camera, Action! | in-ga.me
Pingback: Spiele selbst entwickeln mit XNA, Teil 4: Optimierungstechniken | in-ga.me