www.jammni.de

Logo - Kleiner Drache

Logo - Drache2. Das erste XNA-Programm

Home >> Tutorials >> XNA−Tutorial
Screenshot des 'Neues Projekt...'-Dialoges mit ausgewähltem Projekttyp und vergebenen Projektnamen

Erstellen des Projektes

Im Gegensatz zu den anderen Tutorials wird dieses Tutorial hauptsächlich mit der IDE von Microsoft arbeiten und nur kurz am Rande die Befehle für die Kompilierung auf der Kommandozeile erwähnen. Sämtliche Projekte sind aber nach Möglichkeit so aufgebaut, dass sie auch ohne XNA Game Studio Express nachvollzogen werden können.

Als erstes wird über Datei->Neues Projekt... eine neues Windows Game-Projekt erstellt. Auf dem Screenshot links ist dies kurz dargestellt, die Auswahl der Projekttypen kann sich aber je nach installierten SDKs von Computer zu Computer unterscheiden. Danach werden bereits einige Dateien erstellt und es liegt bereits ein lauffähiges Programm vor. Wichtig ist hier eigentlich erstmal nur, dass die entsprechenden Verweise auf die XNA-Assemblies korrekt eingebunden wurden.
Da an dieser Stelle aber der Aufbau der Programme grundlegend erläutert werden soll, werden erst einmal alle Dateien aus dem Projekt entfernt (AssemblyInfo.cs, Game.ico, Game1.cs und Program.cs). Anschließend wird eine neue Klasse dem Projekt hinzugefügt. Der entsprechende Quelltext für diese Datei ist unten abgebildet.
Im nächsten Unterkapitel werden die einzelnen Sachen natürlich noch etwas näher beschrieben. Aber kürzer als der entsprechende DirectX Quelltext ist es alle Mal.


Bild von der Ausgabe des XNA-Programms unter Windows XP
Listing 1 - CreateGraphicsDevice.cs:
1:    using Microsoft.Xna.Framework;
2:    using Microsoft.Xna.Framework.Graphics;
3: 
4:    namespace XNATutorial
5:    {
6:      class CreateGraphicsDevice : Game
7:     {
8:       // Globale Variablen
9:       GraphicsDeviceManager graphics; // Das Rendering-Device
10:  
11:       public CreateGraphicsDevice()
12:       {
13:         // Hardware initialisieren
14:         graphics = new GraphicsDeviceManager(this);
15:         Window.Title = "XNA-Tutorial - CreateGraphicsDevice";
16:       }
17:  
18:       protected override void Draw(GameTime gameTime)
19:       {
20:         // Backbuffer löschen und gleichzeitig die Zeichenfläche blau einfärben
21:         graphics.GraphicsDevice.Clear(Color.Blue);
22:         // Weitere Behandlung in der Basisklasse
23:         base.Draw(gameTime);
24:       }
25:  
26:       static void Main(string[] args)
27:       {
28:         // Objekt erstellen
29:         CreateGraphicsDevice game = new CreateGraphicsDevice();
30:         // Spielschleife ausführen
31:         game.Run();
32:       }
33:     }
34:   }

 

Kompilieren auf der Kommandozeile

So es denn jemanden gibt, der unbedingt auf der Kommandozeile sein Glück versuchen möchte, so kann er dies natürlich tun. Vorteilhaft ist es, wenn der Pfad zum C#-Compiler in der entsprechenden Umgebungsvariable hinterlegt wurde. Kompiliert wird dann mit dem folgenden Befehl:
csc /t:winexe /r:"C:\Programme\Microsoft XNA\XNA Game Studio Express\v1.0\References\Windows\x86\Microsoft.Xna.Framework.dll" /r:"C:\Programme\Microsoft XNA\XNA Game Studio Express\v1.0\References\Windows\x86\Microsoft.Xna.Framework.Game.dll" CreateGraphicsDevice.cs
Die Pfade müssen ggf. noch an das System angepasst werden. Empfehlenswert ist dieses Vorgehen natürlich nicht, da Verhaspeln bei der Angabe der entsprechenden DLLs schon vorprogrammiert ist - Batchdateien lassen grüßen.


 

Programmaufbau

Wie bereits im Quelltext gesehen, muss die erstellte Klasse von Microsoft.Xna.Framework.Game erben, damit die Funktionalität für ein Spiel zur Verfügung steht. In dieser Klasse sollten sich die Logik des Spieles und die Renderfunktionen befinden. In der Main-Funktion wird dazu ein Objekt vom Typ CreateGraphicsDevice erstellt. Dabei wird bereits das Fenster erstellt, welches die Anwendung zur Verfügung stellt. Im Konstruktor wird anschließend der GraphicsDeviceManager (Zeile 10) erstellt. Dieser hat die Aufgabe, alle grafikfähigen Geräte (auch Softwareemulationen) aufzulisten und sich daraus ein passendes Gerät auszusuchen. Dieses Gerät wird dann von diesem entsprechend initialisiert und übernimmt die Darstellung der Spielwelt. Im Hintergrund kümmert er sich dabei um alle weiteren Sachen wie Shader-Versionen usw. In Managed DirectX wurde dies noch in mehreren Zeilen Quelltext erledigt.
Außerdem bekommt das Fenster im Konstruktor noch einen kurzen Titel verpasst. Fenstereigenschaften können dabei über die Eigenschaft Window eingestellt werden. Dieses Objekt wird von der Basisklasse (Game) zur Verfügung gestellt.

Die Spielwelt wird in der Methode Draw gezeichnet. Dazu wird einfach die Methode der Basisklasse überschrieben und mit eigenem Inhalt gefüllt. Im Beispiel wird einfach die Zeichenfläche gelöscht und dabei mit einer blauen Farbe überzogen.
Die Draw-Methode wird dabei so oft wie nur möglich aufgerufen. Dies läßt sich auch nicht anderweitig einstellen.

Ganz vollständig ist dieses Programm allerdings noch nicht, da mit XNA ein sehr modulares Konzept in die Entwicklung eingeflossen ist. Im nächsten Unterkapitel werden die fehlenden Teile noch vorgestellt und ein kurzer Einblick in die Erweiterbarkeit gegeben.