mehrere movieclips anhalten?

janbuecker

Mitglied
hi,

derzeit bin ich dabei, ein Spiel zu programmieren und hänge nun an der beliebten "PAUSE"-Funktion. Theoretisch und praktisch gesehen, muss ich nun alle MovieClips stoppen.
Das wäre soweit kein Problem, wenn diese nicht alle Dynamisch in einer Klasse erzeugt werden würden.

Nach Suchen hier im Forum und per Google habe ich folgendes Script gefunden, welches (meines erachtens) das richtige vor hat, aber es nicht ausführen kann.

Code:
MovieClip.prototype.totalAction = function(op,val) {
    this[op](val);
    for (var i in this) {
        if (typeof (this[i]) == "movieclip") {            
            this[i].totalAction(op,val);
        }
    }
};

Ich rufe per Tastendruck nun auf " totalAction("stop"); " und bekomme folgende Fehlermeldung:

256 Rekursionsstufen wurden in einer Aktionsliste überschritten.
Es handelt sich wahrscheinlich um eine Endlosschleife.
In diesem Film werden keine weiteren Aktionen ausgeführt.

Hurra, das Spiel hält an, jedoch ist nun auch das ganze Spiel quasi nicht mehr Funktionstüchtig.

Hat jemand einen Rat, dieses Problem zu bewältigen ODER einen anderen Vorschlag?


Gruß,
Jan
 
Hi,

dieses Problem tritt auf, wenn Deine MovieClips Referenzen zu übergeordneten Clips enthalten.

Beispiel:
Code:
clip 1
  +-- clip 2 // enthält einen Verweis auf clip 1: var owner = _parent

Du müsstest in der Schleife überprüfen, ob ein Objekt des aktuellen Clips ein übergeordneter oder parallel angeordneter Clip des aktuellen ist. Schneller sollte es mit einem Controlflag gehen:
Code:
MovieClip.prototype.totalAction = function(op,val) {
    this._blocked = true;
    this[op](val);
    for (var i in this) {
        if (typeof (this[i]) == "movieclip" && !this[i]._blocked) {            
            this[i].totalAction(op,val);
        }
    }
}
Damit werden Clips, auf denen die Funktion schon ausgeführt wurde, nicht abermals durchlaufen. Du musst nur beim Aufheben der Pause darauf achten, dass Du die Variable _blocked aller Clips wieder auf false setzt.

Gruß
.
 
Zurück