prev up next


SWF - SDK

Das ,,Macromedia Flash File Format (SWF) Software Development Kit (SDK) `` - so der volle Titel - ist auf der Webseite von Macromedia kostenlos erhältlich und enthält neben der Dokumentation des SWF-Dateiformats den in C++ geschriebenen Quellcode, der das Erzeugen von Flashdateien über eine Programmierschnittstelle ermöglicht.
Die mitgelieferten Klassen sind mit der Einschränkung, daß sie lediglich für die Entwicklung von SWF-exportierenden Programmen genutzt werden, frei zu verwenden. Macromedia verlangt, daß die unter Verwendung des SDK entwickelten Produkte Flashfilme im korrekten Format abspeichern. Erzeugte SWF-Dateien müssen zum einen fehlerfrei mit einem Grafikobjekten (HFCircle, HFPolygon, ...), Text (HFText, HFEditText) und viele mehr. Allerdings ist die Actionscript-Unterstützung noch sehr mangelhaft. Die Tabelle 9 gibt einen Überblick über die Highlevel-Klassen und deren Funktionalität.


Tabelle 9: Highlevelklassen des SWF-SDKs
HFMovie - Flashfilm
HFFrame - Schlüsselbild
HFObject - Basisklasse aller Film-Elemente
HFButton - Schaltknopf
HFFont - Schriftart
HFShape - Basisklasse aller Grafikobjekte
HFEditText - Editierbares Textfeld
HFOval - Ellipse
HFCircle - Kreis
HFPolygon - Polygon
HFRectangle - Rechteck
HFBitmap - Rechteck mit Pixelgrafik gefüllt
HFText - Text
HFSound - Sound
HFAction - ActionScript-Anweisung
HFActionGetURL - Laden einer Webseite
HFActionGoToFrame - Zu einem bestimten Bild im Film springen
HFActionPlay - Einen Film abspielen
HFActionStop - Einen Film stoppen


Die Verwendung der Highlevelklassen soll an einem kleinen Beispiel demonstriert werden: Ein Kreis mit einem radialen Gradientenverlauf als Füllung und ein Rechteck mit einem linearen Gradientenverlauf werden in einem $300*300$ Pixel großen Film plaziert. Das Rechteck wird dann in zwei Schritten um 60 Grad gedreht. Danach beginnt der Flashfilm wieder von vorne. In Abb 25 auf Seite gif ist ein Snapshot des Flashfilmes zu sehen und die zugehörige Implementation ist im Quellcode demonstriert werden: Ein Kreis mit einem radialen Gradientenverlauf als Füllung und ein Rechteck mit einem linearen Gradientenverlauf werden in einem $300*300$ Pixel großen Film plaziert. Das Rechteck wird dann in zwei Schritten um 60 Grad gedreht. Danach beginnt der Flashfilm wieder von vorne. In Abb 25 auf Seite gif ist ein Snapshot des Flashfilmes zu sehen und die zugehörige Implementation ist im Quellcode 2.4 angeführt.

Implementation zur Erstellung eines Flashfilmes
#include <HF3SDK.h>
int main() {
   // erzeuge einen neuen Flash-Film
   HFMovie movie = HFMovie();
   
   // setze die groesse auf 300*300 Pixel
   // Angaben in TWIPS=>6000*6000
   movie.SetSize( 6000, 6000 );
   // drei Bilder pro Sekunde
   movie.SetFrameRate( 3 );
   
   // ein Rechteck (FPIXEL = 20, Umrechnung Pixel nach TWIPS)
   HFRectangle* rect =
   new HFRectangle( 20*FPIXEL,20*FPIXEL, 120*FPIXEL,120*FPIXEL );

   // ein Kreis
   HFCircle* circle =
   new HFCircle( 80*FPIXEL,50*FPIXEL,40*FPIXEL );
   
   // setze die Fuellfarben
   rect->SetLinearFill( Blue_RGBA, Black_RGBA );
   circle->SetRadialFill( Yellow_RGBA, Violet_RGBA );
   
   // platziere Objekte uebereinander
   rect->SetDepth( 1 ); circle->SetDepth( 2 );
   
   // fuege Objekte zu erstem Schluesselbild hinzu
   movie.Frame( 0 )->AddObject( rect );
   movie.Frame( 0 )->AddObject( circle );
   
   // rect dreht sich um den eigenen Mittelpunkt
   movie.Frame( 1 )->RemoveObject( rect );
   rect->Rotate( FloatToFixed( 30.0 ) );
   movie.Frame( 1 )->AddObject( rect );
   movie.Frame( 2 )->RemoveObject( rect );
   rect->Rotate( FloatToFixed( 60.0 ) );
   movie.Frame( 2 )->AddObject( rect );
   
   // schreibe die SWF-Datei und beende das Programm
   movie.WriteMovie("HFExample.swf");
   delete rect; delete circle;
   return( 0 );
}

Durch das SWF-SDK ist es nun möglich, Flashfilme zu programmieren, völlig losgelöst vom Flash Studio, mit dem im allgemeinen Flashfilme erstellt werden. Allerdings ist diese Art der Flashfilmerstellung recht aufwendig, wenn man z.B. bedenkt, daß für eine Wetterprognose täglich ein Film erstellt werden soll. Jeder Film muß einzeln programmiert werden. Falls sich also in einem Film lediglich die Farbe eines Objektes ändern soll, muß der Quellcode des Programms geändert und neu kompiliert werden. Dies ist keine sehr effektive Vorgehensweise, vor allem wenn man bedenkt, daß bei der Entwicklung eines Flashfilmes häufig Änderungen vorgenommen werden, da z.B. die Größe oder Farbe eines Objektes noch nicht ganz genau den Vorstellungen des Entwicklers entspricht.
Damit die Erstellung eines Flashfilmes auf Basis des SWF-SDKs komfortabler vonstatten geht, wäre es denkbar eine Art Generator9 zu implementieren, der ein Datenformat einliest und dann zu einem Flashfilm umwandelt. Sollten sich dann Änderungen ergeben, sind diese nur in der Datei durchzuführen und es ist kein Neukompilieren mehr notwendig. Wie ein derartiger Generator aufgebaut sein kann, wird in Kapitel 6.3 beschrieben.
Da das von Macromedia zur Verfügung gestellte SDK in C++ entwickelt wurde, muß auch der Generator in C++ entwickelt werden, oder gibt es andere Möglichkeiten?
Wenn ein Entwickler das SDK nutzen möchte, aber nicht in der Programmiersprache C++ programmieren will, ist dies auf den ersten Blick nicht möglich. Dies ist aber vielleicht wünschenswert, da andere Programmiersprachen für die zu entwickelnde Anwendung besser geeignet sind, so z.B. die Entwicklung in Java, weil Java eine plattformunabhängige, leicht zu erlernende Programmiersprache ist, das Java Development Kit zur freien Verfügung steht oder dem Entwickler Java persönlich lieber ist als die Entwicklung in C++. Es wäre also erstrebenswert das SWF-SDK für Java zugänglich zu machen, was mit dem Java Native Interface möglich ist. Dies ist ein Bestandteil dieser Diplomarbeit und wird in den Kapiteln 4 und 6.1 beschrieben.


prev up next