Tutorial 3: Das erste 2D Game: Jetzt wird gezeichnet

  • Im letzten Tutorial wurde die Objekte für den Player, den Gegner(Enemy) und das Spiel Environment(das allgemeine spiel) erstellt.
    Nun geht es erst mal darum diese beim start zu öffnen und mit werten zu befüllen.
    Hierfür gehen wir in die Methode Initialize aus der Game.cs, dort initialisieren wir die variablen

    Code
    protected override void Initialize()
            {
                // TODO: Fügen Sie Ihre Initialisierungslogik hier hinzu
    [COLOR="red"]            player = new Player();
                enemy = new Enemy();
                environment = new GameEnvironment();[/COLOR]
                base.Initialize();
            }


    Ab diesem Punkt sind die variablen einsatzfähig, d.h. ist es logisch das in der Initialize Mehtode zu machen.
    Nun geht es darum die Standartwerte zu füllen, das machen wir auch noch in dieser Methode.

    Die verschiedenen einstellungen habe ich farblich markiert.
    Bei den globalen einstellungen habe ich vor erst isMenu auf false gestellt, da das menü später kommt.
    won und lost ist auf false, weil die dem spiel nacher sagen ob es weiter rechnen muss oder ob das spiel vorbei ist und wie es geendet hat, und wenn eins davon von anfang an auf true wäre gäb es ein ergebnis bevor dass spiel angefangen hätte.
    bgColor ist die Hintergrund farbe, da lasse ich euch freie wahl was ihr nehmt, ConrflowerBule ist für gewöhnlich bei XNA games standart.

    Bei den Spieler und gegner einstellungen ist sind position und Geschwindigkeit interresant.
    Die koordinaten sind pixel in einem koordinaten system, allerdings sieht ein Programm Koordinaten system anders aus als ein Mathematisches
    Das ist ein Mathematisches:

    und das ein Pixel system:

    Wie man Sieht orientiert sich das Pixel system nach der oberen linken ecke, was bedeutet dass im gegensatz zum Mathematischen die y werte rumgedreht werden müssen(aus + wird -)
    daher Startet der spieler mit player.pos=new Vector2(0f, 0f); auf der Position 0,0 also in der Linken oberen ecke des programms.
    und bewegt sich nicht.
    auch interresant ist diese zeile:

    Code
    enemy.pos = new Vector2(0f, environment.windowHeight - 97f);


    Die sagt nichts anderes als auf der x position 0(linker rand) und auf der y position soll es die gesammte fenstergröße - die eigene größe (97) sein, das bedeutet das der untere rand der gegner textur genau auf dem unteren rand des Spielfendes liegt.
    Und mit .speed = new Vector2(150f, 0f); wird gesagt dass sich der gegner in einer sekunde un 150 pixel nach rechts verschieben soll(klingt wenig ist aber schnell genug).
    das .Bombs = new List<Bomb>(); muss sein, damit man die listen(einfache array klasse) verwenden kann.

    Nun müssen die Texturen und töne geladen werden die wir in der Content Pipline gespeichert haben.

    Im letzten Tutorial habe ich am Ende den Asset Name angesprochen, das zeige ich euch nochmal genauer:
    Im Projektmappen explorer haben wir den Unterpunkt Bomber Content(Content)
    dieser enthält die Content objekte, klickt man auf eines dieser objekte so erscheinen die einstellungen im Eigenschafts fenster

    Das rote ist diese Asset Name einstellung, die ist ganz wichtig, denn über diese einstellung ruft ihr das elemt auf.
    also bennene ich die mal um:
    Aus dem Zepelin mache ich PlayerIMG
    Aus der Bombe Mach ich bomb
    Aus dem Gegner mach ich EnemyIMG
    aus dem Laser(gegner atk) mach ich Shot
    Aus den Spieler Leben mach ich PL
    Aus den Gegner Leben mach ich EL
    Aus der Hintergrund musik mach ich BGM
    aus dem Bomben Explosions sound mach ich Boom
    Aus dem Mauszeiger mach ich Cursor
    und aus dem Laser sound Mach ich Laser

    Jetzt geht es an die Verwendung:
    Hiefür gehen wir in die Methode Load Content


    Wie man recht deutlich erkennen sollte kann man die Contentpipline mit Content oder this.Content ansprechen
    Mit der Methode Load können dann die entsprechenden objekte geladen werden
    Hinter das load muss in <> klammern der Typ stehen, unsere texturen haben wir ja schon in der Objekte.cs als Texture2D angegeben, die 2d Texturen klasse aus XNA, die müssen wir natürlich zum texturen laden hier angeben.
    Bei sounds ist es der typ SoundEffect.
    Hinter diese Klammern kommt dann in runde Klammern() als string der Asset name, den man vorher im eigenschaftsfenster festgelegt hat.

    Code
    Content.Load<[COLOR="#00ffff"]Typ[/COLOR]>("[COLOR="orange"]ASSET[/COLOR]");

    Desweiteren habe ich hier auch die erste musik verwendet:

    Code
    environment.bgMusic = Content.Load<SoundEffect>("BGM"); //Hintergrund Musik Laden
                environment.bgMusicInstance = environment.bgMusic.CreateInstance(); // Hintergrund Musik Instanz zum abspielen Erstellen
                environment.bgMusicInstance.IsLooped = true;//Damit die musik wieder von forn anfängt
                environment.bgMusicInstance.Play();//Abspielen starten


    Mit dem ersten wird das lied geladen,
    Dann wird eine Instanz erzeugt, mit instanzen kann man mehrere töne gleichzeitig spielen und hat auch mehr möglichkeiten
    Mit dem Dritten(isLooped) wird eingestellt dass die musik in einer schleife also immer wieder nacheinander abgespielt werden soll
    und mit .Play(); wird das abspielen gestartet.
    Gestoppt wird es mit .Stop();

    Nun lassen wir das erste mal was zeichnen:
    Den Player und den gegner
    das wird in der Methode Draw gemacht

    Code
    protected override void Draw(GameTime gameTime)
            {
                GraphicsDevice.Clear(Color.CornflowerBlue);
    [COLOR="red"]            spriteBatch.Begin();
                spriteBatch.Draw(player.tex, player.pos, Color.White);
                spriteBatch.Draw(enemy.tex, enemy.pos, Color.White);
                spriteBatch.End();[/COLOR]
                base.Draw(gameTime);
            }


    Den Standartmäßigen XNA code einfach ingorieren, und den code dazwischen schreiben (das erste löscht das letzte bild, das letzte zeichnet das neue)

    Wir zeichen über den spriteBatch, ein standartmäßiges objekt zum 2d zeichnen.

    Um überhaupt was zeichnen zu können muss mach diesen zu erst starten, spriteBatch.Begin(); und am ende nach der zeichen aktion wieder schließen
    spriteBatch.End();
    gezeichnet wird mit der .Draw methode(spriteBatch.Draw).
    diese Methode benötigt mindestens 3 argumente, hat aber noch 17 überläufe(wann anders mehr dazu)
    Die wichtigen angaben sind Was, Wo und Welche Farbe
    als erstes wird immer eine Texture2D gefordert, da gebe ich meine player Textur(player.tex), danach die position, entweder als rectangel, wo man position sowie größe hat, und XNA dann die größe anpasst, oder über einen vector2, welcher nur die position speichert, und die standartmäßige textur größe verwendet.
    Wir verwenden einfach mal nur einen vector2, da wir auch bei der objecte.cs die position in einem solchen gespeichert haben(player.pos)
    Die farbe gibt an wie die textur gefärbt werden soll(auf welche farbe weiß abgebildet werden soll) das hat etwa den selben effekt wie bei photoshop strg+U und bei gimp einfärben (ganz cool eigentlich).

    also noch mal zusammenfassend

    Code
    spriteBatch.Draw(Textur, Position/rectange, Farbe);

    Und im nächsten tutorial bringen wir bewegung rein

    Zitat von Steve Jobs

    Stay hungry - stay foolish.



Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!