Flash ist von Version zu Version immer mächtiger geworden. Das Bedienungskonzept steht allerdings auf wackeligen Fundament da sich eigentlich seit Flash 2 kaum etwas grundlegendes getan hat. Vieles war inzwischen an Funktionalität hinzugekommen ist, wirkt provisorisch angeflanscht.
Wer eher von der gestalterischen Seite kommt, wird Probleme haben die Eigenschaften der Objekte in der Zeitleiste zu erkennen. Er muß sich stattdessen duch ein Wust von Paletten kämpfen. Da ist das Bedienungskonzept von Adobe Livemotion, Adobe After Effects oder auch Apple FinalCut schon zugänglicher und übersichtlicher.
Ein ActionScript-Programmierer wird ähnlich geartete Probleme haben. Zwar wurden erstmals mit Flash 5 ActionScript durch Standardisierung und Tools auf einem Level gehoben der auch dem Kaufpreis entspricht. Aber es hapert doch stark am Workflow und Ausführung.
Es ist eigentlich ziemlich peinlich für Macromedia, das eine ganze Reihe von ActionScript-Befehlen nicht "hardgecodet" wurden, sondern nur im ungleich langsameren Flash-Bytecode. Dies betrifft die meisten String-Befehle.
Was den Workflow aus Sicht eines Programmierers angeht, so fehlt es an unterstützenden Mitteln. Das Debugging ist immer noch relativ schwer, das Suchen nach bestimmten Elementen schwer und die Strukturierung immer noch unklar. Wo soll ich eine Funktion reinpacken? In einem Frame? Einem MovieClip?? Einer MovieClip-Instanz???
Es ist bezeichnet das bis zum Erscheinen von Flash 5 es eigentlich kein vernünftiges Material für Programmierer gab, also Leute die durchaus schon mit Wissen um FOR-Schleifen und Variablen gesegnet sind, aber den Spezialfall "ActionScript" noch nicht kennen.
"Flash 4 Magic" war zwar immerhin ein Buch das mit reichlich Script-Material ausgestattet war. Leider nur mit Null Beschreibung oder Erklärung was wieso gemacht worden ist.
Immerhin, die Situation hat sich gebessert. Die mit Flash 5 gelieferten Handbücher sind hochanständig und eine Reihe von interessanten Bücher ist ungefähr ein Jahr später erschienen ("ActionScript: The Definitive Guide" von Colin Moock, die "Friends of Ed"-Bücher).
_root.doIt();
myClip.doIt();
Load, EnterFrame, Unload
MouseUp, MouseDown, MouseMove
KeyUp, KeyDown, Data
ball._x
statt _root.ball._x
!Press
(MouseDown), Release
(MouseUp), Release Outside
RollOver, RollOut
DragOver, DragOut
KeyPress
(KeyDown)EnterFrame
beim Director):on EnterFrame
an einer MovieClip-Instanz angehängt.go to and play frame 1
on MouseDown
an einer MovieClip-Instanz angehängt.on Press
an einer Button-Instanz angehängt._root
oder den Parent!ActionScripting ist eine unübersichtliche Sache. Zwar steckt eine Struktur und eine Hierachie dahinter, nur das diese von außen kaum zu erkennen ist. Deswegen scheint Flash voll von Macken, Marotten und Eigenarten zu stecken und man braucht eine Weile bis sich einem die dahinterliegende Philosophie erschließt.
Neben dem Platzieren von Scripts, ist Abkapselung und Hierachie von Daten und Eigenschaften so ein weiterer, auf dem ersten Blick nicht zu erkennender Spleen.
Flash kapselt seine Daten. Und um an die Daten ranzukommen, muß man wissen in welchen "Container" diese Daten stecken und wie der Hierachistrang zu diesem Container verläuft. So macht es einen Unterschied ob man _xmouse
oder _root._xmouse
anspricht.
_xmouse
/_ymouse
sind Koodinaten relativ zum Mittelpunkt des MovieClips._root.xmouse
/_root._ymouse
sind Koordinaten der Bühne mit Koordinaten relativ zur oberen linken Ecke.Einige ActionScript-befehle fallen in der Performance sehr negativ auf. Es sind vorzugsweise Befehle zum String-Handling: String.slice()
, String.split()
, String.substr()
. Diese sind so langsam, das mit ActionScript-Basisbefehle ohne weiteres annähernd gleich schneller Ersatz für diese String-Funktionen gebastelt werden kann.
Zwei Eigenschaften sind entscheidend für die Performance von Vektordarsteller: Die Anzahl der Punkte bzw. Liniensegmente, und die Füllung der Vektorfläche. Selbstredend ist unter Performance-Gesichtspunkten ein Verlauf als Füllung eine suboptimale Lösung.
Die Anzahl der Liniensegmente läßt sich durch Flash optimieren, will sagen: reduzieren.
Modify
-> Optimize
. Auch kann man die Optimierungen in mehreren Durchgängen durchlaufen lassen, bis hin zu dem Moment wo sich nichts mehr optimieren läßt.getVersion()
wird damit eine, leere, Variable namens getVersion
.