Flugzeug Spiel – Teil 2
Herzlich Willkommen zu meinem Flugzeug Spiel Tutorial Teil 2. Wenn ihr es noch nicht getan habt, lest euch doch den 1. Teil durch.
Was unser Spiel bereits beinhaltet:
- Flugzeug, welches man von oben nach unten bewegen kann
Und das wär’s auch schon, nicht gerade viel, aber das werden wir in diesem Teil des Tutorials ändern!
Wir wollen uns um die Gegner kümmern. Die Gegner sollen immer auf der rechten Seite erscheinen und sich Richtung Spieler bewegen.
Holt euren Gegner Movieclip auf die Bühne und gebt ihm den Instanznamen “enemy_mc“. Achtet jedoch darauf, dass er sich ausserhalb des sichtbaren Bereichs der Bühne befindet, warum das wichtig ist, erfahrt ihr später.
Nun können wir auch schon anfangen, kopiert erstmal folgenden Code in das Hauptframe auf der Ebene “actions”, dort wo auch schon der Player Code steht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | var maxanzGegner = 10; var anzGegner = 0; var speedGegner = 8;var i = 0; _root.enemy_mc.onEnterFrame = function () { if(anzGegner < maxanzGegner) { for(i=0;i < maxanzGegner; i++) { enemy = this.duplicateMovieClip(_root.enemy_mc, _root.getNextHighestDepth()) enemy._x = 550 + random(500); enemy._y = 30 + random(340); enemy.onEnterFrame = function () {this._x -= speedGegner if(this._x <= -20) { _root.anzGegner = _root.anzGegner - 1; this.removeMovieClip() } } anzGegner = anzGegner + 1; } } } Gehen wir den Code wieder schrittweise durch. |
var maxanzGegner = 3; — Die Anzahl der Gegner die auf einmal erscheinen sollen.
var anzGegner = 0; — Die Anzahl der Gegner die momentan auf dem Bildschirm sind ( Am Anfang immer = 0)
var speedGegner = 8: – Gibt an wie schnell sich die Gegner bewegen.
var i = 0; — Eine Zählvariable, diese brauchen wir später für unsere Schlaufe.
if(anzGegner < maxanzGegner) { – Wenn die Anzahl der Gegner auf dem Bildschirm kleiner ist als die Anzahl der Gegner die maximal da sein dürfen…
for(i=0;i < maxanzGegner; i++) { — Dies ist unsere Schlaufe, sobald i = 0 ist und i kleiner wie die maxanzGegner ist, Wird i um 1 erhöht und der Code in der Schlaufe ausgeführt.
enemy = this.duplicateMovieClip(_root.enemy_mc, _root.getNextHighestDepth()); – Dieser Teil ist interessant, es wird ein neues Objekt mit dem Namen “enemy” erstellt. Dabei wird einfach unser enemy_mc. Die Funktion _root.getNextHighestDepth() gibt uns einen immer fortlaufenden Wert, weiter darauf eingehen möchte ich nicht, es MUSS einfach da sein.
enemy._x = 550 + random(500); — Nun bestimmen wir die X-Position, doch warum ist der Wert grösser als die Bühne selbst? Ganz einfach, wir wollen jah nicht, dass der Spieler sieht wie die Gegner plötzlich erscheinen, sie sollen schön von Rechts her “herein schweben”. Mit random(500) generieren wir eine Zufällige Zahl zwischen 0 und 500.
enemy._y = 30 + random(340); — Das Ganze jetzt auch für die Y-Position.
enemy.onEnterFrame = function () { – Die Funktion kennen wir ja schon, nun wird diese für unser enemy Objekt angewendet.
this._x -= speedGegner; — Dies bewirkt, dass sich der Gegner nach rechts bewegt und zwar genau so schnell wie in der Variable speedGegner festgelegt.
if(this._x <= -20) { — Sobald der Gegner links aus der Bühne rausgeht,
_root.anzGegner = _root.anzGegner – 1; – wird die Anzahl der Gegner um 1 verringert
this.removeMovieClip() — und der Gegner gelöscht.
Schlussendlich wird mit anzGegner = anzGegner + 1; die Gegnerzahl um 1 erhöht, da unser Gegner ja gerade erstellt wurde und somit ein Gegner mehr auf der Bühne ist.
Testet euer Spiel nun und wenn alles richtig ist, sollten nun einige Gegner erscheinen und sich nach links bewegen und sobald sie den Bildschirm verlassen haben, wieder erscheinen.
Das ist alles schön und gut, doch irgendwie ist es doch langweilig wenn die Gegner einfach nur so rumfliegen. Damit unser Spieler ihnen auch ausweichen muss, müssen wir eine Art Lebensanzeige machen. In diesem Fall reicht uns ein einfaches dynamisches Textfeld mit der Variable “live“. Erstellt also im Hauptframe ein neues dynamisches Textfeld und ordnet ihr die Variable live zu.
Testet euer Spiel, jetzt solltet ihr in dem Textfeld den Wert der Variable live sehen, wenn nicht habt ihr irgendetwas falsch gemacht.
Nun wollen wir die Kollision programmieren. Fügt dazu folgenden Code in die onEnterFrame Funktion des enemy Objekts welches in der for-Schlaufe erstellt wird:
1 2 3 4 5 | if(_root.player_mc.hitTest(this._x, this._y, true)) { live = live - 1; this.removeMovieClip() _root.anzGegner = _root.anzGegner - 1; } |
if(_root.player_mc.hitTest(this._x, this._y, true)) { — Wenn der player_mc Movieclip mit this (in diesem Fall, der Gegner) kollidiert,
live = live – 1; — Wird ein Leben abgezogen,
this.removeMovieClip() — Der Gegner gelöscht
_root.anzGegner = _root.anzGegner – 1; — und die Anzahl gegner um 1 verringert.
So, nun werden dem Spieler jedesmal Leben abgezogen, wenn er einen Gegner berührt. Doch was ist wenn der Spieler keine Leben mehr hat? Im Moment noch nichts, doch dies soll sich nun ändern. Sobald der User keine mehr Leben mehr hat also die Variable live <= 0 ist, soll ein GameOver erscheinen. Um dies zu tun müssen wir zuerst ein neues Frame erstellen, dort sollten sich folgende Dinge befinden:
- Ein GameOver Schriftzug
- Ein Button um das Spiel neuzustarten
Erstellt also ein neues Frame und erstellt dort ein statisches Textfeld in dem geschrieben steht “GameOver” und anschliessend ein Button mit dem Istanznamen “back_btn” . Kopiert nun folgenden Code in das eben erstellte Frame in der Ebene “actions“.
1 2 3 | _root.back_btn.onRelease = function() { _root.gotoAndStop(1); } |
_root.back_btn.onRelease = function() { — Wird aufgerufen, wenn der Button gedrückt wird.
_root.gotoAndStop(1) — Zurück zum ersten Frame springen. (Also das Spiel neustarten)
Wenn ihr das Spiel jetzt testet, werdet ihr merken, dass der Film die ganze Zeit vom 1. ins 2. Frame wechselt, das liegt daran, dass wir im 1. Frame noch kein stop() eingefügt haben. Geht also in das erste Frame auf der actions Ebene und fügt dort zuoberst “stop()” ein. Nun sollte es gehen, doch Moment, auch wenn der Spieler weniger als 0 Leben hat, passiert nichts. Damit sich das ändert, kopiert folgenden Code ins 1. Frame in die onEnterFrame Funktion des player_mc Movieclips:
1 2 3 | if(live <= 0) { _root.gotoAndStop(2); } |
Testet das Spiel und nach dem Verlust der Leben sollte nun das 2. Frame angezeigt werden.
if(live <= 0) { – Wenn die Variable live kleiner oder gleich 0 ist,
_root.gotoAndStop(2); — Springt der Film ins 2. Frame.
Doch was fällt auf? Die Gegner “sterben” nicht automatisch, wenn der Film ins 2. Frame springt, dies sieht nicht gerade schön aus und stört. Um dieses Problem und um die “Waffen” des Spielers kümmern wir uns in Teil 3 meines Flugzeug Spiel Tutorials.
Wenn ihr Fragen oder Kritik habt, postet diese doch in den Comments.
Vielen Dank fürs lesen uns bis zum nächsten Mal
Michael Ziörjen















Schön wäre ja auch Teil 3 des Flugzeug Tutorial lesen zu können…..