Mittwoch, 23. Mai 2012


Artikel

April 2008 | Artikel

Get rich and famous, be a game designer

(Link zum Artikel: http://www.entwickler.de/dotnet//001705)

Eine Einführung in das XNA Framework, Teil 1

Text: Jens Konerow
  • Teilen
  • kommentieren
  • empfehlen
  • Bookmark and Share
Mit dem XNA Framework und XNA Game Studio Express läutet Microsoft eine neue Ära der Spieleprogrammierung ein. Vorbei sind die Zeiten, in denen die Zielgruppe eines selbst programmierten Spiels im Wesentlichen aus dem Programmierer des Spiels bestand. Dank des XNA Framework können Spieleentwickler ihre Ergebnisse auch allen Besitzern einer Xbox 360 zur Verfügung stellen. Das ist aber nur ein Nebeneffekt – das XNA Framework bietet so viele Möglichkeiten, dass eine Xbox (sofern vorhanden) eine Weile ungenutzt bleiben dürfte.
Teil 1   Teil 2   Teil 3   Teil 4   

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.

Visual Basic 2005 oder Visual Studio 2005?

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:

  1. #if XBOX
  2. //Xbox 360 Code
  3. #else
  4. //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. ...

Teil 1   Teil 2   Teil 3   Teil 4   

Kommentare

Gravatar reifrund 16.02.2011
um 19:05 Uhr
Ich finde solche Billig-Baukästen generell nicht besonders. Nachdem das Web mit Baukästen für Websites vollgestopft wurde, werden sich die Entwickler von Billig-Modulen vielleicht wirklich auf Baukästen für Games konzentrieren. Ich finde, wer sein Handwerk ordentlich lernt, kann meistens etwas besseres zaubern ... ;-) #zitieren