Een dynamisch swf generator.

Algemeen

Deze package is in staat om dynamisch swf bestanden te genereren. Als een programma swf wil genereren moet er eerst een {@link nl.idgis.flash.FlashMovie} object worden gemaakt, vervolgens worden een methoden van {@link nl.idgis.flash.FlashMovie} aangeroepen die dingen toevoegen aan de movie. Als laatste wordt de methode {@link nl.idgis.flash.FlashMovie#output} aangeroepen die de swf bytes wegschrijft naar de opgegeven {@link java.io.OutputStream}.

Een {@link nl.idgis.flash.FlashMovie} bestaat uit frames, een frame is geen klasse omdat frames niet op zichzelf staan. Een frame is gelijk aan de vorige (of leeg, in geval van het eerste frame), voordat een frame getoont wordt kunnen er items op geplaatst of verwijderd worden. Alle items die op een frame geplaatst kunnen worden zijn subklasse van {@link nl.idgis.flash.FlashCharacter}

De generator kent op dit moment de volgende functionaliteit:

Shapes

Shapes worden gemaakt door de methode {@link nl.idgis.flash.FlashMovie#createShape} aan te roepen, vervolgens kunnen de methodes van {@link nl.idgis.flash.FlashShape} aangeroepen worden om te tekenen. Als een shape klaar is kan deze op een frame gezet worden door middel van de methode {@link nl.idgis.flash.FlashMovie#useCharacter(FlashCharacter)}

Sprites

Sprites in swf zijn MovieClips in Flash. Een sprite is een movie in een movie, een sprite kan bijna alles wat een movie ook kan. Een sprite is een {@link nl.idgis.flash.FlashCharacter} en kan dus worden toegevoegd aan een frame.

ActionScript

De ActionScript ondersteuning van de generator is minimaal, er kan alleen geprogrammeerd worden in een soort assembler. Een ActionScript bestaat uit {@link nl.idgis.flash.ActionRecord}s die behoren tot een {@link nl.idgis.flash.ActionList}. Een {@link nl.idgis.flash.ActionList} kan voor uitgevoerd worden met {@link nl.idgis.flash.FlashMovie#doAction(ActionList)} of met {@link nl.idgis.flash.FlashSprite#doAction(ActionList)}. Het is ook mogelijk om een {@link nl.idgis.flash.ActionList} te koppelen aan een sprite event met behulp van de klasse {@link nl.idgis.flash.ClipActions} en de methode {@link nl.idgis.flash.FlashMovie#useCharacter(FlashCharacter, String, FlashMatrix, ClipActions)}.

Voorbeeld van een script dat "Hoi" print in het trace window van Flash

FlashMovie movie = new Movie();
ActionList list = new ActionList();
list.push("Hoi");
list.trace();
movie.doAction(list);
movie.showFrame();

Flash movie voorbeelden

...
OutputStream outputStream = ...
FlashMovie movie = new FlashMovie(800, 600, 12); //Maak een nieuwe movie

	FlashShape shape = movie.createShape(); //Maak een nieuwe shape
	shape.lineStyle(20, 0xff, 0x00, 0x00, 0xff); //Gebruik een rode lijnen met een dikte van 20 twips (1 pixel)
	shape.beginFill(0x00, 0x00, 0xff, 0xff); //Gebruik een blauwe vulkleur

	//Teken een vierkant
	shape.moveTo(1000, 1000);
	shape.lineTo(2000, 1000);
	shape.lineTo(2000, 2000);
	shape.lineTo(1000, 2000);
	shape.lineTo(1000, 1000);

	movie.useCharacter(shape); //Voeg de shape toe aan het huidige frame

	movie.showFrame(); //Geef het huidige frame weer

movie.output(outputStream); //Stuur de swf bytes naar outputStream
...

Ingewikkelde movies kunnen gemaakt worden door {@link nl.idgis.flash.FlashMovie} te subklassen.

...

public class FlashMap extends FlashMovie
{
	public FlashMap(int width, int height, ...
	{
		super(width, height, 1);

		...
	}
	...

	public void addFeature(Feature feature)
	{
		...
	}

	public void output(OutputStream outputStream)
	{
		...
		showFrame()
		super.output(outputStream);
	}
}

Interne werking

De generator bestaat uit verschillende generator klassen, deze klassen vullen een buffer bij de verschillende methode aanroepen.

De belangrijkste generator klasse is de klasse {@link nl.idgis.flash.FlashMovie}, deze klasse maakt het uiteindelijke swf bestand. De verschillende componenten van de swf worden gemaakt door gespecialiseerde klassen. Deze componenten worden bij gebruik ingevoegd in {@link nl.idgis.flash.FlashMovie}


Klasse: FlashMovie                              FlashShape

    ------------------
    |     header     |
    |----------------|
    |                |
    |                |
                                            |-----------------|
  \                                         |      header     |
|--                                         |-----------------|
| /                                         |    rectangle    |
|                       /                   |-----------------|
|                       - - - - - - - - - - |      styles     |
|                       \                   |-----------------|
|                                           |  shape records  |
|                                           |-----------------|
|
|   |----------------|
|---|place object tag|
    |----------------|
    |  showframe tag |
    |----------------|
    |     end tag    |
    |----------------|

De generator klassen worden bijgestaan door een tweetal hulp-klassen.

Niet alle klassen die de generator kent corresponderen 1-op-1 met de verschillende Tags in de Flash Fileformat Specification. Er is soms afgeweken om een betere Java API te kunnnen maken.