Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tutorials
Autor
Nachricht
r4z3r
Poster
Poster

Anmeldedatum: 16.04.2008
Beiträge: 173

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:

Visual Basic: [code]Imports Microsoft.Xna.Framework
Imports Microsoft.Xna.Framework.Graphics
Imports Microsoft.Xna.Framework.Input[/code]


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 Wink
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.

Hier findet ihr das dritte Tutorial:

http://www.visual-basic-forum.de/viewtopic.php/spielep...eil_3-1400.html

MfG
_________________
 
ShadowLenny
Tutorial Leser
Tutorial Leser

Anmeldedatum: 25.05.2008
Beiträge: 54


Verfasst am: 24.09.2008, 14:44

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
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):

http://www.youtube.com/watch?v=TgChURF5fQE
http://www.youtube.com/watch?v=3dlBRX6BHdU
http://www.youtube.com/watch?v=wiVAtkQ6a8s

edit2:// Bei mir funktioniert die exe ohne Probleme. Wenn du den Source öffnen kannst, kompilier einfach mal neu.

edit3:// da du das erste Tutorial nicht gelesen hast: Du brauchst das XNA Framework, um alles auszuführen. Lies das erste Tut^^
_________________


 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB.NET] Tutorials

Tags: xna tutorial, spieleprogrammierung, visual

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Wie kann ich mich bei euch anmelden?? 387 20.05.2002, 01:28
Keine neuen Beiträge Eine kleine Frage an euch.. 373 30.09.2007, 09:57
Keine neuen Beiträge TopMost Funktion unter DirectX 432 27.07.2007, 11:48
Keine neuen Beiträge Wie Funktion nutzen ? 540 29.06.2007, 21:59
Keine neuen Beiträge update funktion einbauen 741 29.01.2007, 00:11
 



[ Time: 0.3343s ][ Queries: 89 (0.0719s) ][ GZIP on - Debug on ]