Код ActionScript выполняется во flash-плеере в специальной «виртуальной машине», для ActionScript 1 и 2 это была AVM1, для ActionScript 3 была разработана новая AVM2. Нет возможности напрямую взаимодействовать между программами выполняющимся в разных виртуальных машинах, поскольку они несовместимы. К примеру, если в мувик созданный на ActionScript 3 загрузить внешний мувик из ActionScript 1 или 2, то не удастся напрямую управлять им: запустить, остановить, вызвать функцию, считать значение свойства и т.п.
Но можно создать специальный канал для взаимодействия при помощи LocalConnection, используя:
Пример:
Код:
// файл на ActionScript 2: AS2animation.fla
// на timeline размещен один мувиклип названный animation_mc
//Устанавливаем local connection для получения команд извне
var AVM_lc:LocalConnection = new LocalConnection();
// обработчик события stopAnimation
AVM_lc.stopAnimation = function(){
animation_mc.stop();
}
// слушаем события по каналу "AVM2toAVM1"
AVM_lc.connect("AVM2toAVM1");
Код:
// Файл на ActionScript 3: AS3Loader.fla
// local connection для взаимодействия с мувиклипом в AVM1
var AVM_lc:LocalConnection = new LocalConnection();
// загружаем внешнюю SWF AVM1
var loader:Loader = new Loader();
loader.load(new URLRequest("AS2animation.swf"));
addChild(loader);
// при клике мышкой по загруженному мувиклипу вызывается stopPlayback
loader.addEventListener(MouseEvent.CLICK, stopPlayback);
function stopPlayback(event:MouseEvent):void {
// вызывается stopAnimation по каналу "AVM2toAVM1"
AVM_lc.send("AVM2toAVM1", "stopAnimation");
}
Здесь AS3-мувик подгружает к себе AS2-мувик и размещает на сцене. Когда AS2-мувик подгружен и проигрывается пользователь может кликнуть по нему для прекращения проигрывания, при этом вызывается stopPlayback, который отсылает событие "stopAnimation" по local connection каналу "AVM2toAVM1". AS2-мувик получает событие и вызывается обработчик stopAnimation, который приказывает мувиклипу animation_mc остановиться.