Ich habe für diese tutorials ein Kleines ziel gesetzt: Ein 2D Spiel, man spielt einen zepelin und muss bomben auf ein bewegliches ziehl werfen.
Fangen wir an:
Nun Als erstes überlegt man sich das komplette konzept.
Also der Spieler spielt einen bomber(in meinem fall ein zepelin)
dieser zepelin wird über die pfeiltasten bewegt und mit leer werden bomben geworfen.
die bomben sind zu erst ganz einfach und fallen nur in einer konstanten geschwindigkeit.
Unten drunter auf dem Boden ein ziehl mit leben, dieses ziehl bewegt sich nach rechts und nach links und muss getroffen werden.
Für den Player und den Gegner erstellen wir eine eigene Klasse oder struktur, da es ziemlich unübersichtlic wird das ganze in die game.cs zu schreiben
Dann los:
Wir erstellen ein neues Projekt, ein windows game (4.0)
das nenne ich mal bomber.
Wir öffnen die Game.cs, das ist die Klasse für das spiel
Nun erstellen wir eine neue klasse für die variablen, diese nennen wir Objekte(Projekt->Klasse Hinzufügen und Objekte.cs nennen)
Da müssen wir noch ein paar namespaces importieren, damit wir XNA verwenden können:
Dann löschen wir da wir das nicht brauchen
Dann erstellen wir eine player struktur
dann ändern wir die Namespace noch von Bomber in Bomber.Objekte um
und importieren diese in die game.cs
nun ist es in der Game.CS möglich variablen vom Typ Player zu erstellen
(Klassen namen und Struktur namen groß schreiben, und die dazu gehörigen variablen klein)
Nun erstellen wir noch die einstellungen die wir für den player brauchen in der Objekte.cs
Diese einstellungen kommen in die Player Struktur
Alles anzeigen
Ich denke Lives sollte klar sein,
pos ist die aktuelle position in pixeln, dargestellt durch einen vector2(vergleichbar mit der klasse Point aus System.Drawing) Ein Vector2 kann einen x und einen y wert enthalten.
Speed ist die geschwindigkeit die angibt um wie viele pixel pro sekunde sich das objekt bewegen soll, Die geschwindigkeit wird seperat als geschindigkeit x und als geschwindigkeit y betrachtet und nicht als allgemeine geschwindigkeit, d.h. wird ein Vector 2 verwendet
Kamikaze gibt einfach nur an ob die letzte attacke eine Kamikaze(selbstmord) attacke war, sie wird verwendet um den schriftzug Kamikaze einblenden zu lassen
Bombs ist ein Array der klasse/Struktur bomb, da es diese noch nicht gibt müssen wir die gleich schreiben. über diese variable werden alle bomben im spielfeld gehandelt
tex ist die textur des Spielers, das Bild was auf den Bildschirm gezeichnet wird
liveTex ist die textur der leben die auf den Bildschirm gezeichnet wird
Nun erstellen wir eine Struktur Bomb für die Bomben
Alles anzeigen
Neu ist hier die boomInstance
Das ist eine Sound instanz, über die der Sound abgespielt wird, um keine abgehackten töne oder overflows zu bekommen bekommt jede bombe ihre eigene instanz, dazu später mehr
Nun können wir die player struktur kopieren und für den gegner verwenden also als Enemy wieder einfügen.
Alles anzeigen
Eine Enemy Variable fügen wir auch in der Game.cs hinzu
Was noch fehlt sind die allgemeinen variablen
Alles anzeigen
Da meine hintergrund musik als WAV vorlieg muss ein soundeffect verwendet werden
Jetzt fehlt noch in der Game.cs die variable dafür
Texturen und Sounds Laden:
Mit XNA kann man über das Content system verschiedene formate in die xna formate importieren, ein sehr großer vorteil...
Nun müssen die benötigten Texturen und Sounds in diese Content Pipline geladen werden:

Das rote ist der Content.
Auf den macht ihr jetzt rechtskick-> Hinzufügen->Vorhandenes Element hinzufügen und wählt die objekte aus
Ich verwende folgende objekte: Sound für bomben explosion:
Big Bomb Sounds | Effects | Sound Bites | Sound Clips from SoundBible.com
Sound für laser(gegner waffe)
Horror / SciFi / Magic: Download Laser sound effects
(der 2te)
Die folgenden habe ich schnell mit gimp hingeklatscht
Die Bombe:

Der Cursor:

Die Lebensleiste des Gegners:

Die Lebensleiste des Spielers

Und der zepelin den der spieler spielt

Als gegner könnt ihr was immer ihr wollt nehmen, größe bei mir ist 100px x 150px
Klickt ihr diese Dateien im Projekt Mappen Explorer jetzt an so ist da eine Zeile Asset Name, über diesen wert werden später die Inhalte aufgerufen.
So das war es erst mal für dieses tutorial, Beim nächsten wird gezeichnet
Fangen wir an:
Nun Als erstes überlegt man sich das komplette konzept.
Also der Spieler spielt einen bomber(in meinem fall ein zepelin)
dieser zepelin wird über die pfeiltasten bewegt und mit leer werden bomben geworfen.
die bomben sind zu erst ganz einfach und fallen nur in einer konstanten geschwindigkeit.
Unten drunter auf dem Boden ein ziehl mit leben, dieses ziehl bewegt sich nach rechts und nach links und muss getroffen werden.
Für den Player und den Gegner erstellen wir eine eigene Klasse oder struktur, da es ziemlich unübersichtlic wird das ganze in die game.cs zu schreiben
Dann los:
Wir erstellen ein neues Projekt, ein windows game (4.0)
das nenne ich mal bomber.
Wir öffnen die Game.cs, das ist die Klasse für das spiel
Nun erstellen wir eine neue klasse für die variablen, diese nennen wir Objekte(Projekt->Klasse Hinzufügen und Objekte.cs nennen)
Da müssen wir noch ein paar namespaces importieren, damit wir XNA verwenden können:
Dann löschen wir da wir das nicht brauchen
Dann erstellen wir eine player struktur
dann ändern wir die Namespace noch von Bomber in Bomber.Objekte um
und importieren diese in die game.cs
nun ist es in der Game.CS möglich variablen vom Typ Player zu erstellen
(Klassen namen und Struktur namen groß schreiben, und die dazu gehörigen variablen klein)
Nun erstellen wir noch die einstellungen die wir für den player brauchen in der Objekte.cs
Diese einstellungen kommen in die Player Struktur
Quellcode
- /// <summary>
- /// Die Leben des Spielers
- /// </summary>
- public int lives { get; set; }
- /// <summary>
- /// Die Aktuelle Position als XNA Vector 2D
- /// </summary>
- public Vector2 pos { get; set; }
- /// <summary>
- /// Die geschwindigkeit als XNA Vector 2D
- /// </summary>
- public Vector2 speed { get; set; }
- /// <summary>
- /// Die Bomben die sich derzeit im spiel befinden
- /// </summary>
- public List<Bomb> Bombs { get; set; }
- /// <summary>
- /// Das Bild
- /// </summary>
- public Texture2D tex { get; set; }
- /// <summary>
- /// Das Bild der Leben
- /// </summary>
- public Texture2D liveTex;
Ich denke Lives sollte klar sein,
pos ist die aktuelle position in pixeln, dargestellt durch einen vector2(vergleichbar mit der klasse Point aus System.Drawing) Ein Vector2 kann einen x und einen y wert enthalten.
Speed ist die geschwindigkeit die angibt um wie viele pixel pro sekunde sich das objekt bewegen soll, Die geschwindigkeit wird seperat als geschindigkeit x und als geschwindigkeit y betrachtet und nicht als allgemeine geschwindigkeit, d.h. wird ein Vector 2 verwendet
Kamikaze gibt einfach nur an ob die letzte attacke eine Kamikaze(selbstmord) attacke war, sie wird verwendet um den schriftzug Kamikaze einblenden zu lassen
Bombs ist ein Array der klasse/Struktur bomb, da es diese noch nicht gibt müssen wir die gleich schreiben. über diese variable werden alle bomben im spielfeld gehandelt
tex ist die textur des Spielers, das Bild was auf den Bildschirm gezeichnet wird
liveTex ist die textur der leben die auf den Bildschirm gezeichnet wird
Nun erstellen wir eine Struktur Bomb für die Bomben
Quellcode
- public struct Bomb {
- /// <summary>
- /// Die Instanz über die Der ExplosionsSound Abgespielt wird
- /// (jede bombe muss eine eigne haben, damit es zu keinem overflow kommt)
- /// </summary>
- public SoundEffectInstance boomInstance { get; set; }
- /// <summary>
- /// Die Geschwindigkeit
- /// </summary>
- public Vector2 speed { get; set; }
- /// <summary>
- /// Die aktuelle position
- /// </summary>
- public Vector2 pos { get; set; }
- /// <summary>
- /// Der Damage den die explosion verursacht
- /// </summary>
- public int damage { get; set; }
- /// <summary>
- /// Textur
- /// </summary>
- public Texture2D tex { get; set; }
- }
Neu ist hier die boomInstance
Das ist eine Sound instanz, über die der Sound abgespielt wird, um keine abgehackten töne oder overflows zu bekommen bekommt jede bombe ihre eigene instanz, dazu später mehr
Nun können wir die player struktur kopieren und für den gegner verwenden also als Enemy wieder einfügen.
Quellcode
- /// <summary>
- /// Gegner Klasse
- /// </summary>
- public struct Enemy
- {
- /// <summary>
- /// Die Leben des Gegners
- /// </summary>
- public int lives { get; set; }
- /// <summary>
- /// Die Aktuelle Position als XNA Vector 2D
- /// </summary>
- public Vector2 pos { get; set; }
- /// <summary>
- /// Die geschwindigkeit als XNA Vector 2D
- /// </summary>
- public Vector2 speed { get; set; }
- /// <summary>
- /// Die Bomben die sich derzeit im spiel befinden
- /// </summary>
- public List<Bomb> Bombs { get; set; }
- /// <summary>
- /// Das Bild
- /// </summary>
- public Texture2D tex { get; set; }
- /// <summary>
- /// Das Bild der Leben
- /// </summary>
- public Texture2D liveTex;
- }
Eine Enemy Variable fügen wir auch in der Game.cs hinzu
Was noch fehlt sind die allgemeinen variablen
Quellcode
- public struct GameEnvironment {
- /// <summary>
- /// Hintergrund Musik
- /// </summary>
- public SoundEffect bgMusic { get; set; }
- /// <summary>
- /// Hintergrund Musik Instance
- /// </summary>
- public SoundEffectInstance bgMusicInstance { get; set; }
- /// <summary>
- /// Ob das Menü offen ist
- /// </summary>
- public bool isMenu { get; set; }
- /// <summary>
- /// Ob das Spiel Gewonnen ist
- /// </summary>
- public bool won { get; set; }
- /// <summary>
- /// Ob das Spiel Verloren ist
- /// </summary>
- public bool lost { get; set; }
- /// <summary>
- /// Die Hintergrund Farbe
- /// </summary>
- public Color bgColor { get; set; }
- /// <summary>
- /// Das bild des mauszeigers
- /// </summary>
- public Texture2D cursorTex { get; set; }
- /// <summary>
- /// die position des Mauscursors
- /// </summary>
- public Vector2 mousePos { get; set; }
- /// <summary>
- /// Die Breite
- /// </summary>
- public int windowWidth { get; set; }
- /// <summary>
- /// Die Höhe
- /// </summary>
- public int windowHeight { get; set; }
- }
Da meine hintergrund musik als WAV vorlieg muss ein soundeffect verwendet werden
Jetzt fehlt noch in der Game.cs die variable dafür
Texturen und Sounds Laden:
Mit XNA kann man über das Content system verschiedene formate in die xna formate importieren, ein sehr großer vorteil...
Nun müssen die benötigten Texturen und Sounds in diese Content Pipline geladen werden:

Das rote ist der Content.
Auf den macht ihr jetzt rechtskick-> Hinzufügen->Vorhandenes Element hinzufügen und wählt die objekte aus
Ich verwende folgende objekte: Sound für bomben explosion:
Big Bomb Sounds | Effects | Sound Bites | Sound Clips from SoundBible.com
Sound für laser(gegner waffe)
Horror / SciFi / Magic: Download Laser sound effects
(der 2te)
Die folgenden habe ich schnell mit gimp hingeklatscht
Die Bombe:

Der Cursor:

Die Lebensleiste des Gegners:

Die Lebensleiste des Spielers

Und der zepelin den der spieler spielt

Als gegner könnt ihr was immer ihr wollt nehmen, größe bei mir ist 100px x 150px
Klickt ihr diese Dateien im Projekt Mappen Explorer jetzt an so ist da eine Zeile Asset Name, über diesen wert werden später die Inhalte aufgerufen.
So das war es erst mal für dieses tutorial, Beim nächsten wird gezeichnet