Terrain 101: Die Entwicklungsumgebung und das XNA 4.0 Projekt

Dies ist der zweite Artikel meiner neuen Artikelreihe „Terrain 101“, deren Ziel darin besteht, sowohl dem Einsteiger, als auch dem Fortgeschrittenen beizubringen, wie man eine dreidimensionale Landschaft entwickeln kann. Dabei möchte ich mich nicht nur auf eine winzig kleine Landschaft beschränken, wie dies in vielen anderen Tutorials gemacht wird, sondern ich möchte riesige, detaillierte Landschaften mit euch gemeinsam erschaffen, die soweit ausgebaut wird, daß man sie auch in einem Spiel verwenden kann.

In diesem Teil werde ich eine Schnelleinführung in Visual Studio 2010, das XNA Game Studio 4.0 und in die Game-Klasse geben, damit auch der Einsteiger weiß, was er benötigt und wofür diese Dinge da sind. Es ist also ein einfacher Einstieg. Ich habe aber auch ein paar MSDN-Seiten, sowie ältere Artikel aus meinem Blog verlinkt, die auch für etwas fortgeschrittenere Entwickler interessant sein könnten.

Ich werde jeden Artikel – um die Navigation zu erleichtern – mit einer Art Inhaltsverzeichnis beginnen. Dieses wird alle Artikel der Reihe enthalten und so einfach ermöglichen, daß man in diesen Artikel navigiert und bestimmte Themen einfach überspringen kann. Das Inhaltsverzeichnis in den älteren Artikeln werde ich dann jeweils aktualisieren.

Das Inhaltsverzeichnis

Terrain 101: Eine Einführung in dreidimensionale Landschaften in Echtzeit
Terrain 101: Die Entwicklungsumgebung und das XNA 4.0 Projekt
Terrain 101: Das erste Dreieck
Terrain 101: Transformationen
Terrain 101: Vertex- und Index-Buffer
Terrain 101: Land in Sicht
Terrain 101: Technische Rafinessen
Terrain 101: Neue Sichtweisen
Terrain 101: Kamera ab und Action

Die Entwicklungsumgebung

Da mein Blog sich hauptsächlich mit dem Thema XNA beschäftigt, wird diese Artikelreihe selbstverständlich auch auf XNA von Microsoft aufbauen. Und da die aktuelle Version 4.0 ist und die Menge an Tutorials über diese Version aktuell noch relativ mager ist, werde ich auch diese Version verwenden.

Microsoft ist so nett und ermöglicht es uns seit Ende 2006 mit XNA in der Programmiersprache C# Spiele zu entwickeln. Dabei ist es möglich, daß man nicht nur für den Windows PC, sondern auch für die XBox360 und das Windows Phone entwickeln kann und dabei sogar kommerzielle vertriebene Spiele vermarkten kann. Wie dies genau geht, darauf möchte ich hier nicht eingehen und ich werde in diesem Tutorial nicht vermitteln, wie man mit C# entwickelt. Ich setze dieses Wissen als gegeben voraus.

Ein Wort der Warnung: Wer C# nicht beherrscht und sich noch nicht eingearbeitet hat, der wird weder an diesem Tutorial, noch an der Spieleentwicklung mit XNA Spaß haben. C# ist eine verhältnismäßig einfach zu erlernende Programmiersprache und das .NET-Framework, daß als Unterbau für XNA und C# dient ist sehr, sehr mächtig. Es gibt endlos viele Tutorials, Beispielcode und Bücher in allen Sprachen zu diesem Thema. Bitte tut mir und euch den Gefallen und investiert 3-4 Wochen Zeit um diese Programmiersprache zu erlernen und erarbeitet euch eine gute Basis, auf die wir aufbauen können. Dies wird nicht nur euch, sondern auch mir eine Menge graue Haare ersparen (auch wenn meine Haarpracht meinem Nickname alle Ehre macht). Ein Grundverständnis der Objektorientierten Programmierung sind ebenfalls sehr von Vorteil.

Schön ist jedenfalls, daß es all das kostenlos gibt:

Windows Phone Developer Tools

Auch wenn ich hier nicht auf die Entwicklung für das Windows Phone eingehen werde, benötigen wird die Windows Phone Developer Tools. In diesem Paket ist alles notwendige enthalten, was wir zur Entwicklung benötigen. Dies ist insbesondere das XNA Game Studio 4.0 und Visual Studio 2010 Express. Für Windows XP gibt es gesonderte Pakete, allerdings ohne den Windows Phone Emulator und auch einige andere Dinge fehlen dort. Wie das Ganze unter Windows XP funktioniert beschriebe ich hier nicht. Ich habe zwar noch eine XP-Version auf meinem Netbook laufen, aber Windows 7 ist halt der aktuelle Standard. Microsoft hat aber diverse Informationen zu diesem Thema veröffentlich, die sich über eine Suchmaschine leicht finden lassen.

Bitte lest euch die Release-Notes und Systemvoraussetzungen aufmerksam durch, denn dort sind ein paar Besonderheiten und Voraussetzungen beschrieben.

Die Software sollte schnell installiert sein und wird durch aufrufen des „Visual Studio 2010“ Punktes im Starmenü gestartet.

Das Projekt

Über den Menüpunkt Datei / Neues Projekt (File / New Project) öffnen wir den folgenden Dialog, mit dem wir ein neues Projekt anlegen können.

Wichtig ist dabei, daß wir ein Windows Game (4.0) anlegen und diesem im unteren Bereich einen Namen und ein Verzeichnis zum speichern geben, damit wir es auch später wiederfinden und von anderen Projekten unterscheiden können.


Nach wenigen Sekunden öffnet sich die Standard-Ansicht von Visual Studio 2010 Express und die Datei Game1.cs wurde geöffnet. Im rechten Bereich befindet sich nun der sogenannte Solution Explorer. Ich verwende übrigens noch die englische Version der Windows Phone Developer Tools, da die deutsche Version zu Anfang noch nicht zur Verfügung stand.

Jedenfalls wurde eine Projektmappe oder Solution angelegt, die zwei Projekte enthält. Die Projektmappe ist eine Art von Container, die mehrere Projekte enthalten kann und diese zusammenhält. In diesem Fall gibt es unser Windows Game 4.0 Projekt mit Namen Terrain 101 – Part 01 sowie das Content-Projekt Terrain 101 – Part 01 Content. Mit ersterem Projekt werden wir im Verlauf dieser Artikelreihe arbeiten. Das Content-Projekt ist eine kleine Besonderheit. Dort werden Assets wie Texturen, Songs, 3D-Modelle usw. abgelegt und kompiliert. Dies übernimmt die sogenannte Content-Pipeline, auf die ich hier nicht näher eingehen möchte. Eine genauere Erklärung zur Content-Pipeline habe ich in einem anderen Artikel bereits ausführlich behandelt: Die Content-Pipeline: Grundlagen.

Das XNA Game Studio, im folgenden kurz einfach XNA genannt, stellt uns eine sogenannte GameLoop in einer Klasse zur Verfügung. Auch ein Fenster wird geöffnet und diverse Methoden ermöglichen es uns, daß wir einen sehr schnellen Einstieg erhalten und von Anfang an ein funktionierendes Spiel haben, daß selbstverständlich nicht viel offensichtliches macht.

Auf den ersten Blick mag diese Game-Klasse etwas primitiv wirken, aber ich kann versichern, daß diese bereits sehr mächtig ist und bereits vieles vereinfacht. Wer mal bis zu diesem Punkt in nativem DirectX oder OpenGL entwickelt hat, der weiß, wieviel Arbeit einem bereits erspart wurde.

In den folgenden Absätzen möchte ich nun kurz beschreiben, was diese Klasse den nun im Detail macht und wofür die einzelnen Methoden da sind.

Die Game-Klasse

Die erste Methode der Game-Klasse ist Initialize die sehr früh aufgerufen wird. Diese Methode ist dazu gedacht, um die Infrastruktur für unser Spiel aufzubauen. Wir können dort zum Beispiel Komponenten registrieren: Registrierung von Game-Components. In dieser Methode sollte jedenfalls noch keine Grafik oder ähnliches geladen werden, da die Initialisierung des GraphicsDevice, daß dazu notwendig ist, noch nicht abgeschlossen ist.

Die nächste, wichtige Methode ist LoadContent. Diese Methode ist dazu gedacht, alle Assets der ContentPipeline, aber auch prozedural erzeugten Content zu laden bzw. zu erzeugen. Das GraphicsDevice für den Zugriff auf die Grafikkarte steht beim Aufruf bereits zur Verfügung. Solange wir uns auf die Game-Klasse beschränken, wird diese Methode nur ein einziges Mal kurz nach dem Start des Spiels ausgeführt.

Mit dieser Methode arbeitet UnloadContent eng zusammen, denn UnloadContent wird am Ende des Spiels verwendet, um Assets wieder zu entladen, also aufzuräumen. Dabei müssen wir uns nicht um Assets kümmern, die über den ContentManager, also aus der Content-Pipeline kommen, da dies automatisch geschieht. Wir haben hier aber die Möglichkeit selbst erzeugte Daten freizugeben etc.

Die beiden letzten, interessanten Methoden in der Game-Klasse möchte ich zusammen erklären, da diese auch zusammenhängen: Update und Draw. Beide werden in einem bestimmten Rhythmus vom XNA-Framework aufgerufen und erhalten ein GameTime-Objekt als Parameter. Nähere Informationen zu dieser Trennung habe ich Ende 2009 in meinem Artikel „Warum ist Draw und Update getrennt?“ beschrieben, damals zwar noch für XNA 3.1, aber das Verhalten ist immer noch genauso, wie es bereits immer war.

Der erste Programmstart

Mittels F5 können wir nun unser erstes XNA-Programm starten. Sicherlich macht dieses Programm noch nicht viel, wir sehen lediglich einen blauen Bildschirm in der Farbe CornflowerBlue, welches die Standard-Hintergrundfarbe von XNA ist. Trotzdem ist dies ein Anfang, den wir ab jetzt immer weiter ausbauen werden… Noch fällt zwar nicht die Kinnlade runter, aber jeder hat mal klein angefangen.

Zusammenfassung

In diesem zweiten Artikel der Reihe Terrain 101 habe ich kurz beschrieben, welche Entwicklungsumgebung wir benötigen um unser Terrain zu erzeugen. Ich habe ebenfalls kurz beschrieben, wie man ein neues Projekt anlegt und wozu die Content-Pipeline, sowie die Game-Klasse da ist. Als Abschluss dieses Tutorials haben wir dann unser neues Spiel gestartet.

Im nächsten Teil wird es dann endlich richtig losgehen. Wir werden die einzelnen Methoden der Game-Klasse mit Leben füllen und unser erstes Dreieck rendern. Ich werde ein paar Worte darüber verlieren, wie der Render-Vorgang abläuft und was wir dabei alles zu beachten haben. Gleichzeitig werde ich noch ein paar Worte zur Fixed-Function-Pipeline und zu Effekten verlieren. Im nächsten Artikel geht es also bereits um echte 3D-Grafik…

Advertisements

Veröffentlicht am 15.06.2011 in 3D Terrain, Tutorial, XNA, XNA 4.0 und mit , , , , , , getaggt. Setze ein Lesezeichen auf den Permalink. 8 Kommentare.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: