Eine Wellenlinie bewegt sich bei gedrückter Maustaste zum unteren Bühnenrand

Ergebnis der swf-Datei

Der Programmcode mit Kommentar ohne Erklärungen

Kommentare sind im nachfolgenden Code grau geschrieben.

// ZEICHNEN EINER WELLENLINIE, DIE SICH BEI GEDRÜCKTER MAUSTASTE ZUM UNTEREN BÜHNENRAND BEWEGT
/*
Zeichnen der Wellenlinie in einem eigenen neuen Movieclip welle_mc
*/
createEmptyMovieClip("welle_mc", this.getNextHighestDepth());
welle_mc._x = 0;
welle_mc._y = 0;
curve(welle_mc, baseCurve, [0, 0], Stage.width, 100, 100, 1, 0xFF0000);
/*
Bewegen der Kurve bei gedrückter Maustaste in Richtung unterer Bühnenrand.
Die Geschwindigkeit hängt von der Bildrate des Mainmovies ab.
*/
this.onMouseDown = function() {
   this.onEnterFrame = function () {
      if (welle_mc._y<Stage.height) {
         welle_mc._y += 10;
      } else {
         delete onEnterFrame;
      }
   };
};
/*
Stoppen der Abwärtsbewegung beim Loslassen der Maustaste.
*/
this.onMouseUp = function() {
   this.delete onEnterFrame;
};
/*
Definieren der Funktionen curve(), baseCurve()
*/
function curve(mc:MovieClip, bc:Function, pt:Array, l:Number, a:Number, b:Number, lineWidth:Number,                lineColor:Number):Void {
   mc.lineStyle(lineWidth, lineColor);
   mc.moveTo(pt[0], pt[1]);
   while (l>0) {
      pt = bc(mc, pt, a, b);
      l = l-a;
   }
}
function baseCurve(mc:MovieClip, pt:Array, a:Number, b:Number):Array {
   mc.curveTo(pt[0]+a/4, pt[1]-b/2, pt[0]+a/2, pt[1]);
   mc.curveTo(pt[0]+3*a/4, pt[1]+b/2, pt[0]+a, pt[1]);
   pt[0] = pt[0]+a;
   return pt;
}

Der Programmcode mit Erklärungen

Bewegen der Kurve vom oberen zum unteren Bühnenrand mit dem Event-Handler onEnterFrame

Wenn eine swf-Datei im Shockwave-Player abgespielt wird, so werden jedesmal, wenn die linke Maustaste gedrückt bzw. losgelassen wird, die Ereignisse MouseDown bzw. MouseUp ausgelöst.
Man kann nun für einen Movieclip Funktionsliterale oder Funktionen definieren, die bei Eintreten dieser beiden Ereignisse aufgerufen werden, indem diese Funktionsliterale oder Funktionen den Event-Handlern onMouseDown bzw. onMouseUp zugewiesen werden.

this.onMouseDown = function() {
   this.onEnterFrame = function () {
      if (welle_mc._y<Stage.height) {
         welle_mc._y += 10;
      } else {
         delete this.onEnterFrame;
      }
   };
};

this.onMouseUp = function() {
   this.delete onEnterFrame;
};

Im obigen Fall wurde dem Event-Handler onMouseDown für das Mainmovie ein Funktionsliteral zugewiesen. Darin wird dem Event-Handler onEnterFrame für das Mainmovie ein Funktionsliteral für das Bewegen des Movieclips welle_mc zugewiesen. Dem Event-Handler onMouseUp wurde das Löschen des onEnterFrame-Handlers zugewiesen.
D.h. immer wenn die linke Maustaste gedrückt wird, wird dem Event-Handler onEnterFrame ein Funktionsliteral zugewiesen, das den Movieclip welle_mc bei EnterFrame-Ereignissen nach unten bewegt, solange noch nicht der untere Bühnerand erreicht ist. Sobald die Maustaste wieder losgelassen wird, wird der onEnterFrame-Handler gelöscht und der Movieclip welle_mc wird nicht mehr bewegt. Dadurch bewegt sich die Kurve bei gedrückter Maustaste nach unten bis zum Bühnenrand.