25.2 ActionScript
Die meisten versteckten Funktionen bietet in Flash sicher die eingebaute Programmiersprache ActionScript. Wussten Sie z.B., dass sich in Pfadangaben zu Movieclips anstelle von _level0 auch die Eigenschaft _flash verwenden lässt? Von eher geringem Nutzen ist, dass Sie mit der Aktion getURL wie mit loadMovie Flash-Filme laden können: getURL ("meinFilm.swf", "_level1"); lädt zum Beispiel eine neue SWF-Datei in die Stufe 1 (engl. Level 1).
25.2.1 Textfelder
Auf Änderungen in Textfeldern reagieren
Es ist sehr nützlich, dass es bereits seit längerem einen Weg gibt, auf Texteingaben durch die Benutzer zu reagieren. D.h. wenn der Benutzer ein Textfeld ändert, können gezielt Aktionen ausgeführt werden.
Alles, was man dafür braucht, ist ein Textfeld, das mit einer Variablen verbunden ist, und ein Schlüsselbild in derselben Zeitleiste mit der Bildbezeichnung variablenname_changed.
text changed.fla
Das Entscheidende ist die Zeichenkette _changed direkt hinter dem Variablennamen des Textfeldes in der Bildbezeichnung. Alle Aktionen, die in diesem Bild liegen, werden ausgeführt, sobald ein Anwender den Inhalt des Textfeldes verändert. In unseren Tests erwies sich diese undokumentierte Funktion aber zu Recht als undokumentiert: Zahlreiche Abstürze verhinderten allzu oft den Einsatz, so dass die moderneren Ereignismethoden und Listener sicherlich die bessere Wahl sind (siehe »Ereignisse« ab Seite 282).
25.2.2 Speichern von Daten
Tabelle 25.1
Lokal Daten mit Flash speichern
Anweisung/Objekt
|
Entwicklungsumgebung
|
Player
|
Bemerkung
|
Cookie
|
Flash 5 oder neuer
|
Flash 5 oder neuer (nur in der Entwicklungsumgebung)
|
undokumentiert
|
dashBoardSave
|
nur Flash 5
|
nur Flash 5 (nur in der Entwicklungsumgebung)
|
undokumentiert
|
fscommand save
|
nur Flash 5
|
nur Flash 5 (nur im Stand-alone-Player)
|
undokumentiert
|
SharedObject
|
Flash MX oder neuer
|
Flash Player 6 oder neuer
|
Von Macromedia empfohlene Methode, um Daten zu speichern.
|
Cookie-Objekt
Bei einer undokumentierten Entdeckung ist Ernüchterung aufgekommen. Das Cookie-Objekt bietet einen sehr beschränkten Nutzen, da es sich nicht im Webbrowser nutzen lässt. Das Cookie-Objekt funktioniert nur innerhalb der Entwicklungsumgebung: Mit meineVariable = Cookie.getCookie(); wird das Cookie als XML-Objekt geladen. Mit Cookie.setCookie(daten); wird ein XML-Objekt oder eine Zeichnkette gespeichert. Das dazugehörige Cookie findet sich im Unterordner Mmfdata innerhalb des Flash-Programmordners wieder (seit Flash MX findet sich dieser Ordner innerhalb der Anwendungsdaten, also z.B. unter C:\Dokumente und Einstellungen\Benutzername\Anwendungsdaten\Macromedia\Flash MX\Configuration\Mmfdata). Der Dateiname wird abhängig von der Flash-Anwendung automatisch generiert. Übrigens speicherte das Macromedia Dashboard in Flash 5 die Benutzereinstellungen mit der ebenfalls undokumentierten Anweisung dashBoardSave auf eine ähnliche Art und Weise. Da das Cookie-Objekt nicht von Macromedia dokumentiert ist, kann die Funktionstüchtigkeit nicht garantiert werden. Nicht zuletzt aus diesem Grund sollten Sie – falls möglich – auf das leistungsfähigere und flexiblere SharedObject-Objekt zurückgreifen, das seit Flash MX und dem Flash Player 6 unterstützt wird.
Undokumentierte Objekte in ActionScript 2
Die meisten der undokumentierten Befehle und Objekte sind von Macromedia nicht korrekt deklariert worden, so dass eine typsichere Verwendung oder die Benutzung in ActionScript 2.0 meist zu einem Compiler-Fehler führen. Dies kann aber mit Hilfe einer selbst geschriebenen Klasse wie hier am Beispiel des Cookie-Objektes leicht gelöst werden:
intrinsic class Cookie {
static function getCookie():XMLNode;
static function setCookie(data:XMLNode);
}
dashBoardSave
Der Befehl dashBoardSave(objekt, dateiname); speichert Zeichenketten oder Movieclips in der angegebenen Datei. Der dashBoardSave-Befehl funktioniert nur innerhalb der Entwicklungsumgebung und nicht im Webbrowser. Außerdem scheint dieser Befehl seit Flash 6 ignoriert zu werden.
fscommand save
Das fscommand ("save", "meineDatei.txt"); speichert alle Variablen der Hauptzeitleiste in der angegebenen Datei. D.h. um gezielt Variablen und deren Werte zu sichern, müssen diese recht unkomfortabel in der Hauptzeitleiste abgelegt sein. Der save-Befehl funktioniert nur außerhalb der Entwicklungsumgebung und nicht im Webbrowser. Außerdem wird dieser Befehl seit Flash 6 ignoriert. Alternativ gibt es noch den ein oder anderen Trick, um mit Hilfe des fscommand exec-Daten zu speichern. Aber auch dies beschränkt sich auf einige wenige Plattformen und Flash-Versionen, weshalb besser auf Zusatzprodukte oder das SharedObjekt zurückgegriffen werden sollte.
25.2.3 Prototypenbasierte Objektorientierung mit ActionScript 1
Immer öfter finden sich Tipps zur objektorientierten Programmierung mit Flash im Internet, denn immer mehr Entwickler erkennen die Vorteile dieses Programmierstils. Grundlegende Informationen werden häufig auf Seiten zu JavaScript beschrieben, da die Objektorientierung – um genau zu sein die prototypenbasierte Entwicklung – hier sehr ähnlich zu ActionScript 1 erfolgt. Eine interessante Gegenüberstellung von »echter« Objektorientierung und den Prototypen findet sich übrigens direkt beim Erfinder von JavaScript unter http://developer.netscape.com:80/docs/manuals/communicator/jsobj/contents.htm. Hier wird auch das Thema der Vererbung anschaulich an Angestellten und Arbeiterbienen illustriert.
Neben den Eigenschaften prototype (bei Prototypen) und __proto__ (bei Instanzen), die jeweils den Zugriff auf hinzugefügte Eigenschaften und Methoden steuern, gibt es auch noch die undokumentierte Eigenschaft constructor, die denselben Inhalt erhält wie die ebenfalls undokumentierte Eigenschaft __constructor__ (siehe »Vererbung«, Seite 350). Mit Hilfe dieser Eigenschaft kann der Prototyp, also die Konstruktorfunktion einer Instanz ermittelt und erneut verwendet werden:
function MeineKlasse () {
this.eigenschaft="Wert";
}
meineInstanz=new MeineKlasse();
// Erzeuge eine neue Instanz basierend auf "meineInstanz"
meineZweiteInstanz=new meineInstanz.constructor();
Aufgrund eines Fehlers in der Eigenschaft constructor kann diese in Flash 5 aber leider nicht verwendet werden, um herauszufinden, ob eine Instanz zu einem Prototypen gehört. Anstelle dessen sollten Sie den Vergleich meine
Instanz.__proto__ == DeineKlasse.prototype verwenden. Seit Flash MX ist dieses Problem aber behoben.
25.2.4 ASnative
Wem all die Funktionen in ActionScript inklusive der undokumentierten nicht ausreichen, der kann sein Glück mit ASnative versuchen. Dabei handelt es sich um den direkten Aufruf von Funktionen im Flash Player. Die Funktionen im Flash Player werden dabei über zwei Parameter wie in einer Matrix angesprochen. Für die Aktion trace steht z.B. die Position (100, 4) in der Matrix: ASnative(100,4)("Heppa");, sollte also den Text »Heppa« im Ausgabefenster anzeigen. Meistens weist man aber den Funktionsaufruf einfach einer Variablen zu, wodurch die Verwendung etwas gewöhnlicher aussieht:
meinTrace = ASnative(100,4);
meinTrace("Heppa");
Interessant sind die mit ASnative erreichbaren Funktionen, die Flash zum Teil alleine nicht bietet. Dazu zählt z.B. das Abfragen der mittleren und rechten Maustasten unter Windows. Das folgende Skript erstellt ein eigenes Maus-Objekt, mit dem sich die Zustände (gedrückt oder losgelassen) der einzelnen Maustasten ermitteln lassen:
myMouse = new Object();
myMouse.isLeftMouseDown = function() {
return ASnative(800, 2)(1);
};
myMouse.isMiddleMouseDown = function() {
return ASnative(800, 2)(4);
};
myMouse.isRightMouseDown = function() {
return ASnative(800, 2)(2);
};
my_mc.onEnterFrame = function() {
this.output = "";
this.output += "Left : "+myMouse.isLeftMouseDown()+"\n";
this.output += "Middle : "+myMouse.isMiddleMouseDown()+"\n";
this.output += "Right : "+myMouse.isRightMouseDown();
};
Eine Liste der möglichen Funktionsaufrufe mir ASnative und weiteren undokumentierten Funktionen finden Sie u.a. bei http://chattyfig.figleaf.com/flashcoders-wiki/index.php?ASNative
.
Wie finde ich Geheimnisse in Flash?
Die erste Anlaufstelle zum Aufspüren unbekannter Funktionen sollte die Macromedia-Website sein. Im Support-Bereich (www.macromedia.com/support/flash) veröffentlicht Macromedia regelmäßig neue Tutorials, Erklärungen zu unbekannten oder wenig dokumentierten Befehlen und natürlich auch Updates, die wiederum neue Funktionen beinhalten können. Hier finden sich auch Links zu überarbeiteten Versionen der Flash-Handbücher mit vielen neuen Befehlen. Die beste Quelle für eine aktuelle Dokumentation sind jedoch die – leider nur englischsprachigen – Livedocs unter http://livedocs.macromedia.com.
Aber nicht alles findet man direkt bei Macromedia. Für die wirklichen Geheimnisse sollten Sie die zahlreichen Foren rund um Flash aufmerksam und regelmäßig lesen. Im englischsprachigen Bereich gehört hier sicher http://www.ultrashock.com mit zu den ergiebigsten Quellen. Ein weiterer Tipp ist die Mailingliste unter http://chattyfig.figleaf.com. Aber auch im deutschsprachigen Raum werden viele dieser Forschungsergebnisse in Foren wie http://www.flashforum.de gesammelt und diskutiert.
|