|
||||||||||||||||||||||||||||||||||||||||||
|
|
ActionScript 3 and Flex support in iSpring
This article describes the way of the iSpring generated presentations communication with Flash applications written in ActionScript 3 and Flex. Table of contents:
ActionScript 3.0 and ActionScript 2.0 communicationiSpring generated Flash presentations provide ActionScript 2.0 API. Being loaded by Flash 9 or Flex applications which use ActionScript 3, this API is not accessible anymore - ActionScript 2 and ActionScript 3 object model are not compatible; Flash movies version 8 or below work in isolated environment within Flash 9 (AS3) and Flex applications. However, there is a way AS2 and AS3 Flash movies can communicate. It is a LocalConnection class usage. One Flash movie creates a named LocalConnection object, defines some functions in it and calls connect() method: var lc:LocalConnection = new LocalConnection();
lc.sayHello = function(name:String):Void
{
trace("Hello, " + name + "!");
}
lc.connect("connectionName");
Another Flash movie calls these methods using send() method: var lc:LocalConnection = new LocalConnection();
lc.send("connectionName", "sayHello", "John Smith");
The first Flash movie will receive and execute commands froth the second. When a two-way interaction is needed, each Flash movie must create 2 LocalConnection objects: one connection to send commands and another one to receive them. There is one thing which must be taken into account. It is possible to create only 1 LocalConnection with a given name on the same PC. So it is recommended to generate connection name based on some random information such as date. The sending Flash movie needs a connection name of the receiving Flash movie. This connection name can be passed as an URL parameter: var lc:LocalConnection = new LocalConnection();
lc.sayHello = function(name:String):Void
{
trace("Hello, " + name + "!");
}
// generate connection name which is most likely unique
var connectionName:String = "conn" + (new Date().getTime());
lc.connect(connectionName);
var childMove:MovieClip = this.createEmptyMovieClip("mc", this.getNextHighestDepth());
// load child movie and pass the connection name in URL parameter
childMovie.loadMovie("someMovie.swf?lcid=" + escape(connectionName));
A child Flash movie gets the connection name from URL variables: var lc:LocalConnection = new LocalConnection(); lc.send(this.lcid, "sayHello", "John Smith"); A similar way of Flash movies interaction can be used to establish communication between ActionScript 3 Flash movie and iSpring generated presentations. Flash9 / Flex application loads a special bridge SWF module written in ActionScript 2 which loads the presentation. This bridge module communicates with the presentation using its ActionScript API; from the other hand the bridge communicates with Flash 9 / Flex application using LocalConnection. This process is illustrated in the following diagram.
ActionScript 3 bridge communication module APIA bridge communication module (with source code) is included in iSpring Ultra and iSpring SDK samples. There is also a set of ActionScript 3 classes providing ActionScript 3 API simplifying communication with iSpring presentations.
Integration with Flex applicationsiSpring generated presentations can be easily integrated with Flex applications using ispring.flex.PresentationContainer class. This class extends the standard mx.core.UIComponent class. SamplesThe following example illustrates the usage of the AS3 bridge module in Adobe Flash CS3:
import ispring.as3bridge.*;
import flash.display.*;
import flash.events.*;
var player:Player;
if (flash.system.Capabilities.playerType == "External")
{
writeLog("This example will work in browser plugin, ActiveX or Standalone Flash player");
return;
}
// create target sprite
var target:Sprite = new Sprite();
addChild(target);
// load bridge
var loader:BridgeLoader = new BridgeLoader(target);
loader.addEventListener(BridgeEvent.PLAYER_INIT, onPlayerInit);
player = loader.loadPresentation("as3bridge.swf", "presentation.swf");
function onPlayClick(e:MouseEvent):void
{
player.playbackController.play();
}
function onPauseClick(e:MouseEvent):void
{
player.playbackController.pause();
}
function onPlayerInit(e:BridgeEvent):void
{
writeLog("Player initialized");
player.playbackController.addEventListener(BridgeEvent.SLIDE_CHANGE, onSlideChange);
playButton.buttonMode = true;
playButton.addEventListener(MouseEvent.CLICK, onPlayClick);
pauseButton.buttonMode = true;
pauseButton.addEventListener(MouseEvent.CLICK, onPauseClick);
}
function onSlideChange(e:BridgeEvent):void
{
writeLog("current slide: " + e.slideIndex);
}
function writeLog(txt:String):void
{
log.appendText((log.text.length == 0) ? txt : "\n" + txt);
log.scrollV = log.maxScrollV;
}
ActionScript 3 communication demo
Adobe Flex communication demo
See alsoAnimationStep
Class |
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||