Flash Checker, Teil 3: Dokument und Bibliothek

Im ersten und zweiten Teil des Flash Checkers habe ich eine einfache objektorientierte Flash-Erweiterung verfasst, um die Dokumenteneinstellungen einer FLA-Datei zu prüfen. In diesem Teil zeige ich Ihnen, wie Sie auf die Inhalte der Zeitleiste und Bibliothek zugreifen.

Als erstes wird das zu behandelnde Dokument (FLA) benötigt. Entweder man lädt ein Dokument oder man geht über die Liste aller geöffneten Dokumente oder man nimmt wie hier einfach das aktuell in Flash geöffnete und aktive Dokument.

1
var currentDocument = fl.getDocumentDOM();

Die Zeitleiste (bei mehreren Szenen die Zeitleisten) der aktuellen FLA-Datei sind nun über dieses Dokument zugänglich.

1
2
3
for (var i=0; i<currentDocument.timelines.length; i++) {
	var currentTimeline = currentDocument.timelines[i];
}

Und in der Zeitleiste werden die Ebenen verwaltet (zur Erinnerung: Hier wird der Quellcode, also die FLA-Datei, behandelt und nicht die kompilierte SWF-Datei, der diese Ebenen nämlich völlig unbekannt sind).

1
2
3
for (var i=0; i<currentTimeline.layers.length; i++) {
	var currentLayer = currentTimeline.layers[i];
}

Ebenen enthalten Bilder und Schlüsselbilder. Wobei nur in den Schlüsselbildern relevante Informationen abgelegt sind, weshalb in erster Linie diese Schlüsselbilder (Keyframes) interessieren.

1
2
3
4
5
6
7
for (var i=0; i<currentLayer.frames.length; i++) {
	if (currentLayer.frames[i].startFrame == i) {
		var currentKeyframe = currentLayer.frames[i];
	} else {
		continue;
	}
}

In den Schlüsselbildern liegen die Elemente der Anwendung. Mit Hilfe von JSFL (JavaScript für Flash) kann beispielsweise deren Position geprüft werden.

1
2
3
4
5
6
for (var i=0; i<currentFrame.elements.length; i++) {
	var currentElement = currentFrame.elements[i];
	var topfraction = currentElement.top % 1;
	var leftfraction = currentElement.left % 1;
	if (topfraction != 0 || leftfraction != 0) fl.trace("Warning: Position is not snapped to pixels!");
}

Für eine vollständige Prüfung eines Flash-Dokumentes reicht aber die Zeitleiste des Hauptdokuments nicht aus. Denn in der Bibliothek liegen noch viele weitere Inhalte, die überprüft werden müssen. Die Bibliothek ist dabei eine einfache Eigenschaft des Dokuments und verfügt ihrerseits über eine Liste von Inhalten (items).

1
currentDocument.library.items

Diese Inhalte können dann – im Falle von Symbolen wie MovieClips – ähnlich einem Dokument geprüft werden. Anders als ein Dokument haben sie aber nur genau eine Zeitleiste, denn nur Dokumente können in Szenen unterteilt sein.

1
2
3
4
5
for (var i=0; i<currentDocument.library.items.length; i++) {
	if (currentDocument.library.items[i].itemType == "movie clip") {
		var currentTimeline = currentDocument.library.items[i].timeline;
	}
}

Die Komplette Erweiterung können Sie hier im Quellcode oder auch als fertige Flash Extension (MXP) zur einfachen Installation herunterladen.