Per AS alle Komponenten eines beliebigen Films ermitteln

  • Themenstarter Themenstarter Matthias_Nordwig
  • Beginndatum Beginndatum
M

Matthias_Nordwig

Der Titel sagt es ja schon. Ich würde gern wissen, ob es eine Möglichkeit gibt, alle Komponenten eines beliebigen Films (sowohl dynamisch erzeugte, als auch statisch vorhandene) zu ermitteln. Zweck:

Ich habe einen Würfel der sich in 3 Dimensionen dreht mit Beläuschtungseffekten versehen. Dieser Würfel ist gezeichnet. An den einzelnen Flächen, habe ich meine Contentseiten in Form von hereingeladenen Movies. Nun möchte ich diese Seiten ebenfalls wie den Würfel mit dem Beläuchtungseffekt versehen. Dazu muss ich jedoch die Pfade der einzelnen Komponenten per AS ermitteln. (Das möchte ich also nicht manuell machen)

Wenn das nicht klappt, werde ich wohl alle genutzten Komponenten überschreiben müssen, und Ihnen die Möglichkeit geben Subkomponenten zu listen. Diesen Aufwand möchte ich mir jedoch möglichst ersparen.

MfG


Matthias Nordwig
 
Eigentlich will ich nicht nur das abfragen, sondern alle möglichen Komponenten. Also auch Textfelder usw.. Im Prinzip möchte ich rekursiv alle Komponente des der gesamten Show auflisten lassen.

Schade das es soetwas nicht gibt. Das bedeutet wieder Arbeit. ^^


MfG

Matthias
 
Zuletzt bearbeitet von einem Moderator:
Schade hab grad kein Flash hier um das zu testen. Aber:

Ist das (i in _root) Pseudocode, oder ist das so syntaktisch tatsächlich möglich die einzelnen Komponenten anzusprechen?

*sry für den Spam aber das würde mich jetzt doch wirklich interessieren, das währ ja echt goil wenn das funktioniert.

MfG

Matthias Nordwig
 
Ja, das kannst Du so verwenden.

Hier mal eine einfache Funktion, die alle Objekte (ausser Funktionen) rekursiv ausgibt:
PHP:
function parseObj(obj) {
	// Einrücken:
	if (depth == undefined) depth = 0;
	var spc = "";
	for (var i=1; i<=depth; i++) {
		spc += "  ";
	}
	depth ++;
	for (var i in obj) {
		// Funktionen überspringen:
		if (typeof(obj[i]) != "function") {
			trace(spc + i + ": " + obj[i] + " (" + typeof(obj[i]) + ")");
			if (typeof(obj[i]) == "movieclip") {
				parseObj(obj[i]);
			}
		}
	}
	depth --;
}

parseObj(_root);

Gruß
.
 
Hi!

Super genau so etwas habe ich gesucht!

Da muss ich nichteinmal mehr selbst nachdenken ^^

Vielen Dank euch beiden!

MfG

Matthias Nordwig
 
Hallo zusammen....

auch ich habe ein ähnliches Problem: Ich arbeite mit Flash MX 2004 und habe mir selber einige Komponenten gebastelt (einen video-player, ein film-auswahlliste,...) nun möchte ich eine art Controller - Komponente erzeugen, die alle im Film bzw. auf der Bühne befindlichen Komponenten kennt.

Da die Komponenten dynamisch zur Laufzeit erst generiert werden, muss ich irgendwie abfragen können, welche Komponenten gerade an _root hängen ....

Wenn ich den hier vorgeschlagenen Code einfach unverändert übernehmen, kriege ich eine Endlos-schleife und muss flash beenden......

Weiss jemand rat?

Viele grüsse,

Cristian
 
Hier mal eine Vereinfachung des Skripts.

Sollte mich wundern wenn das zu einer Unendlichschleife führt.

PHP:
function parseObj(obj) { 
    for (var i in obj) { 
            trace(obj[i]);
            if (typeof(obj[i]) == "movieclip") { 
                parseObj(obj[i]); 
            } 
    } 
} 
parseObj(_root);

Du solltest natürlich aufpassen, das der Frame, welcher den Code enthält nicht mehrmals angesprungen wird. ^^

Ansonsten solltest du ggF. mal posten wie du es genau implementiert hast.

MfG

Matthias
 
Hi,

was Du bei vielen Objekten bekommen kannst, ist keine Endlosschleife, sondern eine Rekurstion, die für den Flashplayer zu tief ist, um sie in einem Frame abzuarbeiten.

Lösung: Lege eine globale Variable an (z.B. "c"), die Du bei jedem Aufruf der Funktion inkrementierst. Erreicht diese Zählvariable einen Wert von mehr als 200 - 250, so wartest Du einen Frame und setzt den Zähler wieder auf 0:
PHP:
var c = 0;
function parseObj(obj) {
    delete this.onEnterFrame;
    c ++;
    for (var i in obj) {
            trace(obj[i]);
            if (typeof(obj[i]) == "movieclip") {
                if (c < 250) {
                    parseObj(obj[i]);
                } else {
                    c = 0;
                    this.onEnterFrame = function() {
                        parseObj(obj[i]);
                    }
                }
            }
    }
}
parseObj(_root);

Gruß
.
 
Zurück