Das XNA Framework ist weder eine Spiele-Engine noch ein Baukasten, mit dem ein Computerspiel zusammengeklickt wird. Das XNA Framework ist eine Plattform, die ein objektorientiertes Modell zur Verfügung stellt, um mit der Hardware zu kommunizieren. Der Abstraktionsgrad ist so hoch, dass die Programmierung fast unabhängig vom System wird. Im Hintergrund steht ein eigens für die Xbox 360 entwickeltes .NET Compact Framework. Wird bei der Entwicklung darauf geachtet, welche Klassen und Methoden jenes Framework unterstützt, bedarf es keiner Änderung am Code, um das Spiel zu portieren. Zielt die Anwendung ausschließlich auf die Windows-Plattformen ab, stehen alle Möglichkeiten offen, die Entwickler von der Windows-Programmierung gewohnt sind.
Gegen Ende April ist eine neue Version des XNA Framework und XNA Game Studio Express erschienen. Diese beiden neuen Versionen der zwei Komponenten sind mit der Versionsnummer 1.0 Refresh betitelt worden. XNA Game Studio Express ist ein Add-in für Visual C# 2005 Express. Die aktuellste Version setzt Visual C# Express mit Service Pack 1 voraus und unterstützt offiziell auch Windows Vista.
Die in dieser Artikelserie präsentierten Beispielprogramme wurden mit XNA Game Studio Express 1.0 Refresh entwickelt. Das Ziel der Serie ist die Entwicklung zweier Computerspiele, die auf beiden Systemen laufen. Zu Beginn liegt der Fokus auf einem zweidimensionalen Spiel, das im zweiten Teil als 3D-Variante umgesetzt wird. Der erste Teil beschäftigt sich mit den Grundlagen, die zur Umsetzung eines 2D-Computerspiels erforderlich sind. Jeder Abschnitt wird durch ein kleines Beispiel untermalt und konzentriert sich nur auf die entsprechende Thematik.
Eine häufig gestellte Frage ist, ob es möglich sei, mit Visual Studio 2005 bzw. mit Visual Basic 2005 Express und dem XNA Framework zu entwickeln. Bis dato lautet die Antwort: Nein. Es existieren noch keine (offiziellen) Aussagen, ob Microsoft Visual-Basic-Programmierern das Tor zu XNA öffnen wird. In Planung ist zumindest eine Professional-Version, die dann auf Visual Studio 2005 aufsetzt und noch in diesem Jahr erscheinen soll.
XNA Game Studio Express
Nach der Installation und dem Start von XNA Game Studio Express ist auf dem ersten Blick kein Unterschied zu Visual C# 2005 Express erkennbar. Ausgetauscht wurden die Projekttypen sowie die Item Templates. Weiterhin stellt das Add-in die Verbindung zur Content Pipeline her, in der alle Ressourcen (Modelle, Texturen und Shader) residieren.
Für beide Plattformen stehen je zwei Projekttypen zur Verfügung. Ein Projekttyp zum Erzeugen einer XNA-Anwendung und ein Typ zum Entwickeln von Klassenbibliotheken. Es ist ratsam, zunächst ein Windows-Projekt anzulegen und daraufhin im Xbox-360-Projekt auf dieselben Codedateien zu verweisen. Codesegmente können mit der #if-Direktive wie folgt auf die beiden Plattformen abgestimmt werden:
#if XBOX//Xbox 360 Code#else//Windows Code
In der Hauptrolle: Die Game-Klasse
Grundlage eines jeden Spiels stellt eine Instanz der Game-Klasse dar. In der Regel existiert pro Anwendung genau eine Instanz jener Klasse, dessen Konstruktor parameterlos ist. Unter Verwendung der Projektvorlage Windows Game beziehungsweise Xbox 360 Game liegt zu Projektbeginn eine Klasse vor, die von Game erbt und innerhalb der Program.cs instanziiert wird. Weiterhin nennt jene neue Klasse bereits zwei Variablen, graphics und content, ihr eigen. Letztere Variable stellt die Verbindung zwischen Ihrem Code und der Content Pipeline her. Graphics gewährt den Zugriff auf das Graphics Device und alle sonstigen Informationen bezüglich der Grafikkarte (Eigenschaft: Graphics-Device). Ein Graphics Device fungiert als Vermittler zwischen Ihrer Anwendung und der Grafik-Hardware. Das Graphics Device ist für alle Rendering-Operationen erforderlich.
Die Basisklasse erledigt diverse Standardaufgaben, die bei jedem Projektstart anfallen: Die Grafikkarte wird initialisiert, der Game Loop implementiert und zudem sorgt die Klasse dafür, dass unter Windows ein Fenster zur Verfügung steht. Der Game Loop ruft pro Frame die Methoden Update und Draw auf. Zudem sind folgende Methoden per Default überschrieben:
- Initialize()
- LoadGraphicsContent(bool loadAll-Content)
- UnloadGraphicsContent(bool unload-AllContent)
Die Initialize-Methode ist für sämtliche Initialisierungsvorgänge angedacht, die nicht mit der Grafikkarte in Verbindung stehen. Hierfür existiert eine Funktion LoadGraphicsContent. Der Hintergrund hierfür ist, dass grafische Elemente Ressourcen im Speicher der Grafikkarte platzieren. Die Größenänderung des Fensters unter Windows führt etwa dazu, dass das Graphics Device verloren geht und neu initialisiert werden muss. Adressierte Ressourcen müssen neu im Speicher hinterlegt werden. Folglich ruft das so genannte Application Model immer dann die LoadGraphicsContent-Methode auf, wenn das Graphics Device verloren gegangen ist. Das Pendant ist die UnloadGraphicsContent-Methode. ...




