“XNA Game Studio” – Tutorial No.1: Spieleprogrammierung für die Xbox360
Am: 14. September 2009 | Von: Rüdiger | Unter: Kolumne | Tags: Among the clouds, C++, CLR, Common Language Runtime, Datenstrukturen, Debug, Dev-Kit, DirectX, Dominik Lazarek, framework, Gamertag, IDE, Managed Code, Sm1, Visual X# Express Edition 2008, Xbox360, xna, XNA Creator's Club, XNA Framework, XNA Game Studio, Zune | 1 Kommentar »
Wenn man Spiele für eine Konsole entwickeln will, benötigt man einen Publisher und sehr viel Geld für Entwicklerlizenzen und spezielle Entwickler-Konsolen (sogenannte Dev-Kits). Als Hobby- oder Indie- Entwickler ist man deshalb meist aufgeschmissen und muss doch Spiele für den PC schreiben. Nicht ganz. Denn Microsoft bietet für seine aktuelle Spielekonsole Xbox360 eine Möglichkeit für “Normalos” an, ohne großartige Kosten Spiele für die Xbox360 (und ebenfalls für den in Deutschland nicht erhältlichen Zune Player) zu entwickeln. Die Rede ist hierbei von “XNA Game Studio”, einem auf dem .NET Framework aufbauendes Framework, das nur zu dem Zweck existiert, Spiele zu Programmieren. Ohne zusätzlichen Portierungaufwand (oder zumindest: fast ohne) lässt sich mit XNA ein für Windows entwickeltes Spiel auf auf der XBOX 360 und dem Zune ausführen.
Zielsetzung von XNA, das mittlerweile bereits in der Version 3.1 vorliegt, ist es, Programmierern lästige Detailarbeit auf Hardware-Ebene abzunehmen, so dass diese sich komplett auf die eigentliche Spieleprogrammierung konzentrieren können. So übernimmt das XNA Framework beispielsweise die Fenster- und DirectX-Initialisierungen. Beides Aufgaben, die in “purem” DirectX und C++ gecodet bis zu 100 Zeilen in Anspruch nehmen können. Weiterhin stellt das Framework in der Spieleprogrammierung häufig verwendete Datenstrukturen, Klassen und Methoden bereit. So wird man bei der Entwicklung von 2D-Spielen beispielsweise Vektoren, die aktuelle Framerate oder mathematische Hilfsfunktionen, die alle vom Framework angeboten werden, schnell lieben lernen.

Voraussetzungen und technische Hintergründe
Um Spiele mit dem XNA Framework entwickeln zu können, wird zwangsweise ein Windows-PC mit DirectX 9 und Shader Model 2.0 benötigt. Allzu alte Grafikkarten, die nur SM 1 unterstützen, werden von XNA nicht unterstützt. In diesem Fall ist eine Ausführung von XNA-basierten Projekten nicht möglich. Da die einzige von XNA unterstützte Programmiersprache C# ist, ist außerdem der Einsatz von Visual Studio 2008 oder Visual C# Express Edition 2008 als IDE Pflicht.
In XNA und C# geschriebener Programmcode ist sogenannter “Managed Code”. Das bedeutet, dass der Code nicht nativ auf der Hardware ausgeführt wird, sondern auf einer Zwischenebene: der Laufzeitumgebung. XNA nutzt als Laufzeitumgebung die CLR (Common Language Runtime). Managed Code hat vor allem für Programmier-Einsteiger viele Vorteile. So ist es nicht möglich, versehentlich auf einen Speicherbereich zuzugreifen, der nicht dem eigenen Spiel zugewiesen ist. Auch die von vielen verhassten “Pointer” sind nur als sichere und “abgeschwächtere” Form der “Referenzen” verfügbar. Da Managed Code aber von der Laufzeitumgebung während der Ausführung erst interpretiert werden muss, sind Spiele, die in Managed Code geschrieben sind, potentiell immer einen Tick langsamer als Games, die nativ in C++ und DirectX geschrieben sind. Dieser Geschwindigkeitsunterschied ist jedoch nur marginal und dürfte für alle Entwickler, die nicht vorhaben mit XNA eine High-End 3D Engine zu schreiben, kaum spürbar sein.
Das Vorhandensein einer solchen Laufzeitumgebung ist sogar Bedingung dafür, dass XNA- Spiele fast ohne jegliche Anpassung im Code sowohl auf dem PC, als auch auf der Xbox360 ausführbar sind (Der Zune-Player wird im Folgenden außen vor gelassen, weil er in Deutschland noch nicht erhältlich ist) . Denn hier existiert die für den Spiele-Code gleiche Laufzeitumgebung auf dem PC wie auf der Xbox360. Intern sind die Laufzeitumgebungen natürlich unterschiedlich, weil sie den Game-Code auf jeweils unterschiedliche Hardware “übersetzen” müssen. Davon merkt der Spiele-Code jedoch nichts und auch der Programmierer braucht sich darüber keine Gedanken zu machen.
Übrigens: Entwickler von “professionellen” Vollpreisspielen verwenden nicht den Managed Code von XNA, sondern können durch spezielle SDKs und Debug-Konsolen direkt nativ für die Konsole programmieren. An eine solche Debug-Konsole kommt man jedoch nur mit sehr viel Geld und mit einem Publisher im Rücken. Keine Alternative also für Hobby- oder Indie-Entwickler.
Kosten?
Die Benutzung des XNA Frameworks ist völlig kostenfrei, wenn man damit für Windows programmieren möchte. Zielt man jedoch auf ein Spiel für die Xbox360 oder den ZUNE ab, so fallen Kosten an. In diesem Fall muss sich der angehende Spieleprogrammierer nämlich im sogenannten “XNA Creator’s Club” mit seiner Xbox Live ID registrieren (für Xbox-Live-Nutzer sind das die Login-Daten des Gamertags). Nur wer eine Premium-Mitgliedschaft für 99 Euro im Jahr erwirbt, kann seine XNA-Projekte auch auf der Xbox360 oder dem ZUNE abspielen. Alternativ gibt es auch geringere Gebühren für kleinere Zeiträume. Studenten mit MSDN-AA Zugang haben außerdem Zugang zu einer kostenlosen zwölfmonatigen Premium Test-Mitgliedschaft, die das Ausführen des Spiel-Codes auf der Xbox360 oder dem ZUNE zwar erlaubt, kommerzielle Nutzungen (dazu später mehr) aber unterbindet. Aufgrund der enormen Plattformunabhängigkeit von XNA-Spielen ist es jedoch ohne weiteres möglich, ein Xbox360-Spiel als PC-Spiel zu entwickeln und erst kurz vor Fertigstellung zu einem Xbox360-Spiel zu konvertieren. Dadurch kann man sich die teure Zwölf-Monats-Mitgliedschaft sparen und nur für die letzte Entwicklungsphase z.B. eine Sechs-Monats-Mitgliedschaft kaufen, die entsprechend günstiger ist.

Spiele verkaufen
Ja! Spiele, die mit XNA für die Xbox360 erstellt wurden, kann man auch für bares Geld an den Mann bringen. Microsoft bietet zu diesem Zweck den in Deutschland erst kürzlich hinzugekommenen XBOX Live “Indie Games” Channel im Xbox360-Dashboard an. Dort können Spiele von Hobbyentwicklern, die XNA zum Entwickeln verwendet haben, genau so heruntergeladen, getestet und gekauft werden wie ihre “großen Vorbilder”, die Xbox Live Arcade-Spiele. Bevor ein solches Indie-Game aber im Indie-Channel erhältlich ist, muss es sich der Kritik der anderen Premium-Mitglieder des XNA Creator’s Club stellen. Von ihnen wird das “neugeborene” Game auf Herz und Nieren getestet und bewertet. Erst dannach wird es dem Online-Portfolio im Indie-Channel hinzugefügt.
Wie geht’s weiter?
In Kürze folgt der zweite Teil meiner Kolumne! Dann beginnt der Praxisteil – ich erkläre, welche Werkzeuge und Möglichkeiten das XNA Framework im Detail bereitstellt und werde den Aufbau der beim Erstellen eines neuen XNA-Projektes automatisch generierten Klasse erläutern. Die späteren Teile der Kolumne münden schließlich in der Schritt-für-Schritt-Programmierung eines kleinen 2D-Spiels.
Dominik Lazarek
Teil 2 der Kolumne: “XNA Game Studio” – Tutorial No. 2: Das Framework im Detail
Über den Autor:
Dominik Lazarek studiert seit 2007 Medieninformatik an der FH Düsseldorf mit Ausrichtung auf Grafik- und Spieleprogrammierung. Für eine Semesterarbeit programmierte er zuletzt zusammen mit zwei Kommilitonen das XNA-Spiel “Among The Clouds”.


[...] Teil 1 der Kolumne: “XNA Game Studio” – Tutorial No.1: Spieleprogrammierung für die Xbox360 [...]