Spieleprogrammierung mit XNA - Teil 2 Verfasst am: 24.09.2008, 13:04
Spieleprogrammierung mit XNA - Teil 2
Willkommen zum zweiten Teil der XNA Tutorialreihe. In diesem Teil möchte ich euch die Grundkenntnisse von XNA zeigen. Hier werdet ihr die XNA Variablentypen und die FUnktionen das erste mal kennenlernen. Also fangen wir mit Schritt 1 an.
2.1 - Import der Namespaces
Damit auch alle Funtkionen zur Verfügung stehen müsst ihr zuerst einmal die Namespaces importieren. Schreibt daher nach ganz oben in euer Codefenster:
Nun stehen uns die Funktionen von XNA die wir benötigen zur verfügung.
2.2.1 - Der Grafikbaustein
Nun wollen wir natürlich auch was mit XNA machen Zunächst einmal brauchen wir dafür eine Variable.
Visual Basic: [code]Private Device As Graphics.GraphicsDevice = Nothing [/code]
Die Variable Device ist unser Grafik Baustein. Damit können wir ein grafisches Objekt herstellen, dazu aber später mehr. Jetzt haben wir zwar ein Grafikobjekt, können aber noch nichts damit anfangen, weil die Verbindung zu einem Grafikadapter fehlt. Erstellt daher eine Funktion namens Initialisieren() und schreibt folgenden Code hinein:
Visual Basic: [code] Try Dim presentParams As New PresentationParameters presentParams.SwapEffect = SwapEffect.Discard Dim XNAGraphicsAdapater As Microsoft.Xna.Framework.Graphics.GraphicsAdapter = Graphics.GraphicsAdapter.Adapters.Item(0) Device = New Graphics.GraphicsDevice(XNAGraphicsAdapater, DeviceType.Hardware, Me.Handle, presentParams) AddHandler Device.DeviceReset, AddressOf OnResetDevice Return True Catch ex As Exception MsgBox(ex.Message) Return False End Try [/code]
Dieser recht kompliziert aussehende Code macht nichts anderes, als unser Grafikobjekt 'Device' mit einem Grafikadapter zu verbinden. Nichts desto trotz gehen wir den Code Zeile für Zeile durch.
Zunächst einmal befindet sich der Code in einem Try-Catch Block, um Fehler zu vermeiden, die unser Programm möglicherweise zum Absturz bringen könnten. Wir erstellen zunächst eine neue Variable presentParams und deklarieren sie als PresentationParameters. In der zweiten Zeile weisen wir der Eigenschaft SwapEffect von presentParams den Wert SwapEffect.Discard zu. Das ist recht harmlos. Es sagt nichts anderes aus, mit welches Effekten unser Grafikobjekt erstellt werden soll. Ihr könnt auch andere Effekte verwenden. Die darauf folgende Zeile erstellt einen Grafikadapter (Wie der Name schon sagt). Item(0) wählt dann den ersten Grafikadapter aus. Nun weisen wir unserem Grafikobjekt noch den Grafikadapter zu. AddHandler in der folgenden Zeile weist der Device.DeviceReset Eigenschaft eine neue Funktion zu, nämlich OnResetDevice. (Die wir jetzt schreiben werden) Und das wars auch schon! Jetzt kommt die nächste Sub dran.
2.2.2 OnResetDevice Funktion
Diese Funktion erstellt unser Grafikobjekt neu, wenn es verloren gegangen ist.
Visual Basic: [code] Public Sub OnResetDevice(ByVal sender As Object, ByVal e As EventArgs) If Device Is Nothing Then 'Grafikobjekt neu initialisieren Initialisieren() End If End Sub [/code]
Wenn also unser Grafikobjekt "verloren gegangen" ist (Is Nothing) wird unsere Erstellfunktion (siehe oben) einfach nochmal aufgerufen.
2.2.3 OnPaint Funktion
Die OnPaint Funktion ist die wichtigste und letzte Funktion dieses Tutorialteils. Sie wird alle paar Millisekunden aufgerufen. Hier findet fast alles statt, denn in dieser Sub werden die Bilder auf unser Formular gezeichnet. Der Code für diese Funktion lautet folgendermaßen:
Visual Basic: [code]OnResetDevice(Device, Nothing) If Device Is Nothing Then Exit Sub Device.Clear(ClearOptions.Target, Microsoft.Xna.Framework.Graphics.Color.Blue, 1.0F, 0) Device.Present() Me.Invalidate()[/code]
Zunächsteinmal wird die Funktion OnResetDevice (oben) aufgerufen. Was diese Funktion macht, sollte bereits klar sein. Sollte unser Device dann trotzdem nicht erstellt sein verlassen wir die Sub. Ansonsten gehts einfach weiter. Device.Clear leert unseren Device Buffer und löscht das Grafikobjekt quasi vom Bildschirm. Alles was übrig bleibt ist ein blauer Hintergrund. (Microsoft.Xna.Framework.Graphics.Color.Blue) Device.Present legt dann das, was im Device Buffer ist auf den Bildschirm ab. (Es liegt nichts drin, also bleibt der Bildschirm blau) Man kann sich das als Film mit ganz vielen Bildern vorstellen, bei dem immer ein neues kommt. Me.Invalidate() sorgt dafür, dass unser Fenster neu gezeichnet wird.
2.3 Aufruf
Wenn ihr nun das Programm startet passiert einfach nichts, weil keine Funktion aufgerufen wird. Öffnet daher das Form_Load Event und schreibt folgenden Code hinein:
Visual Basic: [code]Initialisieren() Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.Opaque, True)[/code]
Die erste Zeile ruft unsere geschriebene Funktion auf, wärend die zweite Zeile eine weitere Funktion aufruft. Nämlich Me.SetStyle. Die sorgt einfach dafür, dass unser Fenster so aussieht wie wir es wollen.
Wenn ihr nun euer Programm startet sollte es in etwa so aussehen:
Das ist zwar nicht wirklich viel, aber dennoch der erste Schritt zum erstellen eines eigenen XNA Projekts!
So das wars auch schon mit dem zweiten Teil. Im Anhang findet ihr den SourceCode, der bei gelegenheit nochmal kommentiert wird.
Wow! Klasse Tutorial!
ich hab zwar jetzt nur überflogen und den ersten teil nicht gelesen aber... wie muss ich mir denn das Endprodukt von so einem Projekt vorstellen?
Vielleicht könntest du ja noch ein beispiel dazuschreiben, wie das am Ende aussehen könnte.
Gruß,
Lenny
(Wenn ich was falsch verstanden haben sollte, bitte nich meckern xD)
Übrigens funktioniert die angehangene datei bei mir nicht. da steht immer: GameTest.exe hat ein problem festgestellt und muss beendet werden.
r4z3r Poster
Anmeldedatum: 16.04.2008 Beiträge: 173
Verfasst am: 24.09.2008, 15:31
Hi,
also als Endprodukt wird sicherlich kein High End 3D Autogame stehen. Ich zeige in den Tutorials auch nur das Minimum von dem was XNA drauf hat, um euch einen Einstieg zu geben. Nach den Tutorials sollte ein 2D Game aber machbar sein. Bei 2D Spielen sind euch dann auch keine Grenzen gesetzt, da es in den Tutorials nur um die grafische Oberfläche geht. Was ihr dann daraus macht hängt ganz von euren restlichen Programmierkenntnissen ab.
Zum Anhang: Keine Ahnung, bei mir funktionierts ohne Probleme. Ich lad die Datei nochmal hoch.
edit:// Du willst ja ein paar Beispiele haben, was alles Möglich wäre:
- So ziemlich alle Arcade Games, die man von der XBox360 kennt - Falls Jemand sehr viel Zeit hat: 2D RPGs
Wenn ihr die 3D Programmierung versteht sind keine Grenzen gesetzt. Damit kann man selbst Spiele wie Counterstrike machen (Ist jetzt zwar ein wenig übertrieben, aber es ist machbar)
Hier ein paar Videos von XNA Spielen (3D, damit ihr seht was machbar ist):