Xna Einsteiger Tutorial - VB

Transcription

Xna Einsteiger Tutorial - VB
Xna Einsteiger
Tutorial
Inhaltsangabe
Was ist Xna – Was kann Xna Alles
Xna Download
Graphicsdevice erstellen
Unser Anfang in Xna
Wie ist sowas zu Realisieren
Hintergrund erstellen
Spieler malen und bewegen
Seite
Seite
Seite
Seite
Seite
Seite
Seite
1
2
1 – 4
4 - 5
5 – 6
6
6
Was ist Xna?
Xna ist ein von Microsoft Entwickeltes Framework um Spiele zu Programmieren. Xna
ist gedacht für C# aber man kann es auch in Visual Basic und wahrscheinlich auch
in vielen anderen Programmiersprachen benutzen da diese Funktionen in Dlls
ausgelagert sind!
Warum sollte ich Xna benutzen?
Das ist eine gute Frage! Xna stellt eine menge von Klassen schon vorgefertigt da
zum Beispiel wie man 2D Objekte zerstört, einen Laserstrahl schießt und so weiter,
trotztdem hat man noch eine ziehmlich Große auswahl an möglichkeiten. Xna ist
schneller als GDI ist also für die Spieleprogrammierung besser geeignet!
Was kann man mit Xna alles machen?
Mit Xna kann man 3D aber auch 2D Spiele entwickeln. Man kann 2D Texturen z.b. für
den Boden eines 3D Spiels benutzen!
Da das ein großer ansporn ist habe ich eine kleine Liste von Links zusammengestellt
wo ich denke das jeder gerne so ein Spiel entwickeln möchte, hier die Links:
http://www.xnamag.de/uploads/iow/2521624732_iow.jpg
http://www.xnamag.de/uploads/iow/2521281472_iow.png
http://www.xnamag.de/uploads/iow/2463725518_iow.jpg
http://www.xnamag.de/uploads/iow/2520209488_iow.png
Oder mal 3D aber richtig Professionell:
http://www.xnamag.de/uploads/iow/2510362060_iow.jpg
Video:
http://www.youtube.com/watch?v=qoZaYnXC8Yg&feature=player_embedded
Hier mal ein Video eines Spiels von Microsoft entwickelt mit Xna:
http://www.youtube.com/watch?v=TgChURF5fQE
http://www.youtube.com/watch?v=rRGMcFswwik
Oder auch Need for Speed in Xna Gemacht:
http://www.youtube.com/watch?v=uc_bNFG3IQ4
Xna Downloaden
Bevor ihr fortfahrt müsst ihr sicherstellen ob ihr Xna auf euren Computer habt,
wenn nicht dann installiert es bitte hier der Download link:
http://www.chip.de/downloads/Microsoft-XNA-Game-Studio-Express-1.0_24654414.ht
ml
Viel Spaß!
Graphics Device erstellen in Visual Basic
So jetzt fangen wir mit den eigentlichen Teil an, wir erstellen das Graphics Device
und definieren es so das wir praktisch fast die Codes von C# hier benutzen können.
Dieses Device muss man in C# nicht benutzen da dieses schon Vordefiniert ist.
Also fangen wir an:
Wir gehen auf Datei - Neues Projekt und erstellen es mit den Typ Konsolenanwendung
aber das ändern wir noch so ab das die Konsole nicht angezeigt wird. So jetzt sollte
bei euch im Projektmappenexplorer eine Module.vb sein also so:
Soo jetzt macht ihr rechtsklick darauf und dann sollte dort so ein Kontextmenustrip
erscheinen:
So jetzt klickt ihr auf Umbenennen und ändert den namen auf Program.vb (das ist
eigentlich nicht wirklich nötig aber so siehts in C# auch aus und ihr werdet immer
öfter mitbekommen das ihr manchmal C# Codes bekommt und diese dann Teilweise selber
übersetzten müsst dann ist es einfacher wenn es bei euch genau so aussieht!
So soweit so gut, wir gehen jetzt oben im Menustrip auf Projekt und auf Projekt
eigenschaften!
Da seht ihr jetzt ein Label mit den Text Anwendungstyp: und darunter eine Combobox,
in der Combobox wählt ihr Windows Forms Application und darunter steht Module1 und
ihr wähtl in der Combobox Sub main.
Jetzt ist das Game keine Konsole mehr und ihr könnt Fortfahren
Jetzt fügt ihr über Projekt -> Verweis hinzufügen folgende Verweise hinzu:
Microsoft.XNA.Framework version 3.0
Microsoft.XNA.Framework.Content.Pipline version 3.0
Microsoft.XNA.Framework.Game version 3.0
Bitte achtet darauf das es wirklich auch alle 3.0 sind!
Dann fangen wir jetzt mit den richtigen Code an!
Wir erstellen jetzt über Projekt -> Klasse hinzufügen.. eine neue Klasse hinzu diese
nenennen wir dann gleich Game1.vb.
Jetzt steht bei euch nur Public Class Game1 und End Class.
Über Public Class fügt ihr folgende Imports hinzu:
Imports Microsoft.Xna.Framework
Imports Microsoft.Xna.Framework.Content
Imports Microsoft.Xna.Framework.Game
Imports Microsoft.Xna.Framework.Graphics
Das sind die Imports einmal Das Framework überhaupt, die Graphics für die Texturen,
Game dafür das auch siehe später das Modul funktioniert (was nicht angezeigt wird),
und Content damit wir auch die Texturen laden können!
Soo jetzt seid ihr schon ziehmlich weit gekommen.
Jetzt unter Public Class Game1 noch folgendes:
Inherits Game
Jetzt ist es auch ein richtiges "Game" also aus der Klasse
Microsoft.xna.Framework.Game
Jetzt kommt unter inherts Game noch die Deklarationen:
Dim graphics As GraphicsDeviceManager
So jetzt kommt die Sub new diese Tritt auf wenn wir im später im Modul das Game
starten bzw. als new Deklarieren. Also folgende sub:
Public Sub New()
graphics = New GraphicsDeviceManager(Me)
Content.RootDirectory = "Content"
graphics.PreferredBackBufferWidth = 1280
graphics.PreferredBackBufferHeight = 720
graphics.IsFullScreen = False
End Sub
Diese sagt dass graphics ein neues Graphicsdevice sein soll und das ganze in der
Klasse Game1.vb (besser gesagt dort wird ein Game angegeben und die Klasse ist das
Game) Content.RootDirectory ist das Directory wo alle Texturen mit Content.Load
drausgeladen werden können. Ihr wissen ihr habt jetzt im Game selber keine
Graphische Oberfläche mehr! Danach weil es sonst nicht so schön aussieht haben wir
die Anwendung in Fullscreen gestartet!
So jetzt die nächste sub Intalize
Protected Overrides Sub Initialize()
MyBase.Initialize()
End Sub
Diese Sub tritt auf wenn Mybase.Intalize aufgerufen wird das ist genauso wie bei
C# da könnte man also auch sachen deklarieren aber dafür empfehle ich New oder Später
auch LoadContent
Unsere Nächste Sub wäre dann die Loadcontent.
Protected Overrides Sub LoadContent()
' Texturen laden
End Sub
Hier können jetzt die Texturen geladen werden bzw. sachen Deklariert werden.
Jetzt kommen wir zur UnloadContent diese wird aufgerufen wenn das Spiel verlassen
wird.
Also hier die Sub:
Protected Overrides Sub UnloadContent()
End Sub
Jetzt kommen wir zu der Update Methode diese wird aufgerufen wenn sich was im Spiel
verändert:
Protected Overrides Sub Update(ByVal gameTime As GameTime)
MyBase.Update(gameTime)
End Sub
So und jetzt unsere Letze Sub Die Draw Methode der Titel sagt eigentlich schon alles,
hier werden die 2D oder auch 3D Texturen Models oder was auch immer Gedrawt!:
Protected Overrides Sub Draw(ByVal gameTime As GameTime)
graphics.GraphicsDevice.Clear(Color.CornflowerBlue)
' Hier gehts dann bei 2D weiter! Hier wird Gemalt usw.
MyBase.Draw(gameTime)
End Sub
Jetzt gehen wir nur noch ín die Module1 und hauen folgenden Code in die Sub main:
Using game As New Game1
game.Run()
game.Dispose()
game.Exit()
End Using
Jetzt wisst ihr wovon ich ganzezeit mit New() gesprochen habe wir haben jetzt
nähmlich Game als neues Game1 deklariert.
So wenn ihr jetzt Debuggt sollte es bei euch so aussehen:
Unser Anfang in 2D
So jetzt ist es soweit jetzt kommen wir zu der eigentlichen Spieleprogrammierung!
In diesen Abschnitt des Tutorial habe ich nochmal eine kleine liste von dingen
erstellt die ich euch zeige wie es geht:
Wie kann man sowas realisieren?
Spieler bewegen
So let's go!
Wie kann man sowas realisieren?
Diese frage sollte sich jeder stellen, wie kann man sowas realisieren? Was will
ich überhaupt machen?
Das ist immer eine gute Frage, in unseren fall machen wir es so ein kleines Mini
Spiel mit Kollision wo man einen Spieler über eine kleine Karte bewegen kann und
die Maps stehen in einer Datei. In der Spieleprogrammierung ob in 2D oder auch in
3D ist es wichtig das man lernt Klassen zu benutzen d.h. einzelne Structuren
vielleicht auch Variablen des Games in Klassen auszulagern. Was ich euch empfehle
ist auch Option Strict On das schreibt ihr ganz einfach über jedes Document was
ihr erstellt, wenn ihr es sonst noch nie benutzt habt dann wird es für euch etwas
schwer fallen aber da möchte ich euch sagen es ist eigentlich ganz einfach. Ihr
werdet vielleicht sowas sehen wie Typ String kann nicht in Char umgewandelt werden
aber auch so wird euer Code sauberer.
Nehmen wir uns ein Beispiel, wir haben folgende schleife:
Dim spl As String = "Hallo" & vbnewline & "Welt"
For each trennung As String in spl.Split(vbcrlf)
' hier irgendwas
Next
und er zeigt euch genau das an was ich oben beschrieben habe.
Dann müsstet ihr folgendes machen:
Dim spl as string = "Hallo" & vbnewline & "Welt"
For each trennung as String in spl.Split(Convert.ToChar(vbcrlf))
' hier irgendwas
Next
Sowas ist immer gut und damit ist der Abschnitt realisierung auch zuende.
Deklarationen in 2D
So jetzt müssen wir um richtig zu zeichnen auch deklarieren was ist immer eine gute
Frage. Da wir 2D benutzen nehmen wir eine Spritebatch
Also folgende deklaration:
Dim spriteBatch As SpriteBatch
Vielleicht fragen sich jetzt einige wieso Sprite? Was ist das?
Damit soll nach meiner Meinung nach etwas wie lebendiges Object oder auch nach
wikipedia Geist gemeint sein.
Auf die Spritebatch zeichnen wir später alle unsere sachen drauf!
Also jetzt kommt in die Load Content:
spriteBatch = New SpriteBatch(GraphicsDevice)
So jetzt ist die Spritebatch deklariert jetzt machen wir nur noch folgendes in die
Draw Sub aber unter Graphicsdevice.Clear:
spriteBatch.Begin()
' Hier werden Die Texturen gezeichnet
spriteBatch.End()
Soo jetzt gehts weiter zum nächsten Abschnitt.
Hintergrund erstellen
Da wir unser 2D Game ganz schön haben wollen erstellen wir einen Hintergrund dafür,
größe 1280 Breite und 720 höhe, genauso groß wie dir Form. Bisschen weiter unten
ist der Link zu meinen Background.
Also erstmal deklarieren wir unter Public Class:
Dim Background As Texture2D
So der Background wär jetzt die Texture jetzt müssen wir ihn nur noch in der Load
Content deklarieren damit der auch weiß welchen Background er nehmen soll, also
ins Load Content:
Background = Texture2D.FromFile(GraphicsDevice, "Pfad")
Natrülich müsst ihr den Pfad durch euren Pfad ersetzen zum Backgroundbild. So jetzt
gehen wir zum Zeichnen. Ihr geht also zu der Draw Sub und wo steht ' Hiwer werden
Die Texturen gezeichnest da fahren wir gleich fort das ist zwischen
sprtiebatch.Begin() und Spritebatch.End().
Also dort kommt folgender Code rein:
spriteBatch.Draw(Background, New Vector2(0, 0), Nothing, Color.White)
Jetzt haben wir in die Spritebatch die in Content Load mit der GraphicsDevice
verbunden wurden ist den Background draufgezeichnet mit den koordinaten 0, 0 und
die größe des Bildes.
Bei mir sieht der Background so aus:
http://file1.npage.de/005127/98/bilder/background_-_kopie.jpg
Könnt ihr auch frei verwenden wie ihr wollt ist eigentlich der Standart Xna Himmel
mit Umgekehrten farben.
So jetzt gehen wir zum nächsten Abschnitt!
Spieler malen und bewegen
In diesen Abschnitt zeige ich euch wie ihr den Spieler bewegt nach links und rechts
das andere sollte selbst erklären sein.
Was ich erstmal sagen muss das das mit den Springen in Xna ist immer so eine sache
für sich -> man muss sich etwas mit Physik auskennen kurz gesagt man muss mehr
rechnungen erstellen wie z.b. die Geschwindikeit des Spielers und der Luftdruck
um einen Perfekten Sprung hinzubekommen, da das für den Anfang noch etwas für
Kompliziert ist lasse ich Springen weg und wir haben Links und Rechts. Aber soweit
sind wir ja noch garnicht wir müssen erst den Spieler zeichnen.
Das geht ähnlich wie mit den Hintergrund, erstmal Deklarieren wir folgendes unter
Public Class:
Dim Hero As Texture2D
Dim Position As New Vector2(1, 500) ' Startposition des Spielers
Das wird dann unser Held (Hero) und haben in Vector die Startposition geschrieben.
Jetzt kommt nur noch in die Load Content:
Hero = Texture2D.FromFile(GraphicsDevice, "Pfad")
Und in die Draw Methode und jetzt aufpassen UNTER Spritebatch.Draw(Background kommt
folgendes:
Spritebatch.Draw(Hero, Position, Nothing, Color.White)
Jetzt wird der Spieler immer dorthin gemalt wo die Position ist!
Soweit so gut jetzt wollen wir aber den Spieler mit der Pfeiltaste Links und Rechts
bewegen können! Dafür müssen wir in Visual Basic meineswissens jetzt zur
GetAsyncKeystate aus der User32 Api greifen.
Also folgende Deklaration:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vkey As Long)
As Boolean
Das ist die Api Jetzt können wir einfach ins Update ereignis folgenden Code tun:
If GetAsyncKeyState(Windows.Forms.Keys.Left) Then
HeroGoLeft()
ElseIf GetAsyncKeyState(Windows.Forms.Keys.Escape) Then
[Exit]()
ElseIf GetAsyncKeyState(Windows.Forms.Keys.Right) Then
HeroGoRight()
End If
Aber bitte vor My.Base ...
Jetzt wenn man Escape drückt beendet er das Game wenn man Pfeilrechts drückt geht
er nach rechts Pfeil Links nach links aber das ganze passiert erst wenn wir unsere
Subs haben.
Fangen wir an mit der HeroGoLeft()
Also Folgende Sub:
Public Sub HeroGoLeft()
Position = New Vector2(Position.X - 2, Position.Y)
' ggf mehr events einfügen
End Sub
Diese sagt das Position ein neuer Vector sein soll mit den Koordinaten von jetzt
aber X ist -2 das heißt er läuft nach links.
Jetzt die HeroGoRight() sub:
Public Sub HeroGoRight()
Position = New Vector2(Position.X + 2, Position.Y)
' ggf mehr events einfügen
End Sub
Das ist genau so wie vorher nur umgekehrt. Jetzt kann die Figur schon nach Rechts
und Links gehen. In meinem nächsten Tutorial zeige ich euch wie ihr mit xna 2D
Kollision anstellen könnt!

Documents pareils