Verschachtelung von MovieClips anzeigen lassen

electron0

Grünschnabel
Hi,

cih suche schon den halben Tag danch wie man ich die Struktur von verschaltelten MovieClips bzw Button bzw Grafiken in der Biblothek anzeigen lassen kann. Denn die lib is schon so angewachsen, dass man da langsam nciht mehr durch sieht :D

Vielen Dank im Vorraus.

mfg
 
Hey electron0.

Ganz einfach: nicht. Die Bibliothek ist lediglich eine Auflistung aller verwendeten Elemente und Symbole und stellt keine Hierarchie o.ä. dar.

Viel wichtiger ist aber: wieso genau sind deine MCs denn so verschachtelt? Magst du die fla mal posten oder zumindest kurz erörtern was genau in dem swf passieren soll und wieso das so verschachtelt ist.

Gruß
jens
 
Du kannst aber die Verschachtelung der Bühne über AS rekursiv ausgeben, z.B.
PHP:
function traceAll(index:Number, x:Object){
    var out:String = "";
    for(var i = 0; i<index; i++){
        out += "-";
    }
    var s:String;
    for(s in x){
        trace(out+s);
        traceAll(index+1, x[s]);
    }
}
traceAll(0, _root);
 
hmm... deine IDee war gut alle Instanzen rekursiv auszugenben nur macht das Flash nciht wirklich mit:
Code:
256 Rekursionsstufen wurden in einer Aktionsliste überschritten.
Es handelt sich wahrscheinlich um eine Endlosschleife.
In diesem Film werden keine weiteren Aktionen ausgeführt.

Werd es mal versuchen mit JavaScript auf die Instance-Struktur zuzugreifen und mir dann dort die Hierachie in ner DAtei ausgeben. Ober weiß du schon wie man das macht?
 
Das weiß ich leider nicht; ich weiß aber auch nicht genau, was du vorhast. :D
Du könntest das Ganze auch mit weniger rekursiven Aufrufen lösen, indem du auf "kleinere" Objekte zugreifst.
Also z.B.
PHP:
function traceAll(index:Number, x:Object){
    var out:String = "";
    for(var i = 0; i<index; i++){
        out += "-";
    }
    var s:String;
    for(s in x){
        trace(out+s);
        traceAll(index+1, x[s]);
    }
}
traceAll(1, mc1);
traceAll(1, mc2);
...
Oder du kannst die Anzahl der "Ebenen" beschränken, z.B.:
PHP:
function traceAll(index:Number, x:Object){
    if(index<10){
        var out:String = "";
        for(var i = 0; i<index; i++){
            out += "-";
        }
        var s:String;
        for(s in x){
            trace(out+s);
            traceAll(index+1, x[s]);
        }
    }
}
 
Bring bei des keine Punkte..... sind mittlerweile knapp 1300 Symbole in der Lib....
Und geht das überhaupt wenn ich bei manchen MCs keine InstanceNamen vergeben habe? Tauchen die dann überhaupt unter _root auf?
 
Moment, ich wollte schon antworten, aber du warst schneller. :)
Wenn du wirklich auf die Bibliothek zugreifen willst, kannst du, wie du schon gesagt hast, die Erweiterung für Flash mit JavaScript nutzen, z.B. das folgende Skript zeigt alle Elemente in der Bibliothem an:
PHP:
fl.outputPanel.clear();
for(var i = 0; i<fl.getDocumentDOM().library.items.length; i++){
    fl.outputPanel.trace(fl.getDocumentDOM().library.items[i].name);
}
alert("Fertig!");
Um das zu starten, einfach unter *.jsfl speichern und über "Befehle" > "Befehl ausführen..." öffnen.
Dein Flash könnte dabei aber abstürzen, wegen der großen Menge, also sichere besser vorher alles.

//Edit: Hier noch der Link dazu: http://help.adobe.com/de_DE/Flash/10.0_ExtendingFlash/WS359E0FA7-1DA9-4c9b-8AE3-CFED6B6B11CE.html
 
Zuletzt bearbeitet:
Danke für deine Hilfe!
Ich war nur n bissel schneller ;)

Hier das JScript was dabei rausgekommen ist:
PHP:
fl.trace("*********** begin ************");

var tiefe = 0;

var bereitsBearbeitet = new Array();

function embeddAllElements(curTimeline, sParentPath)
{

	for (var i = 0; i < curTimeline.layers.length; i++)
	{
		for (var j = 0; j < curTimeline.layers[i].frames.length; j++)
		{
			for (var k = 0; k < curTimeline.layers[i].frames[j].elements.length; k++)
			{
				var elt = curTimeline.layers[i].frames[j].elements[k];

				var sTiefe = "";
				var name = "";
				for (var l = 0; l < tiefe; l++)
					sTiefe = sTiefe + "\t";
				
				if (elt.elementType == "instance")
				{
					
					var schonVorhanden = false;
					for(var g = 0; g < bereitsBearbeitet.length; g++)
						if( bereitsBearbeitet[g] == elt.libraryItem.name )
							schonVorhanden = true;
					
					
					if( !schonVorhanden)
					{

						if (elt.name)
						{
							name = elt.name;
							elt.libraryItem.name = name;
						}
						else
							name = elt.libraryItem.name;
						
						var sPath = sParentPath + "/" + name + "-data";

//						fl.trace("verschiebe " + name + " nach " + sParentPath);
						
						if(!fl.getDocumentDOM().library.moveToFolder(sParentPath, name, true))
							fl.trace(name + " konnte nicht nach " + sParentPath + " verschoben werden");

						fl.getDocumentDOM().library.newFolder(sPath);
						bereitsBearbeitet.push(elt.libraryItem.name);
						
						tiefe += 1;
						embeddAllElements(elt.libraryItem.timeline, sPath);
						tiefe -= 1;
					
					}
				}
			}
		}
	}
}

var itms = fl.getDocumentDOM().library.items;


fl.getDocumentDOM().library.newFolder("alles");

embeddAllElements(fl.getDocumentDOM().timelines[0], "alles");

fl.trace("*********** finish ************");

Nein, bei langen Jscript laufzieten hängt sich Flash nciht auf sondern es kommt ne Meldung, dass das Script schon ungewöhnlich lange läuft und ob man es beenden möchte.
 

Neue Beiträge

Zurück