Доступ к MovieClips в одном файле из другого SWF-файла - PullRequest
0 голосов
/ 15 мая 2009

Я новичок во Flash и AS. У меня есть 2 SWF-файла один в as2 и другой в as3, я загрузил SWF-файл (as2) в as3 swf, он работает, но мне нужно получить доступ ко всем мувиклип из (swf (as2)) и изменить свойство (как стиль ) динамически. как я могу это сделать.

Вот мой код ::

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleComplete);
addChild(loader);
loader.load(new URLRequest("games.swf"));
loader.x = 50;
loader.y = 125;

function handleComplete(event:Event):void{


    trace("swf loaded");
}

приведенный выше код работает нормально и файл SWF также загружается. Как получить доступ к отдельному мувиклипу из файла SWF as2. Я также знаю все название (ID) мувиклипа.

Помогите мне преодолеть эту проблему ... Заранее спасибо ..

1 Ответ

2 голосов
/ 18 мая 2009

Я рекомендую использовать Event.INIT вместо Event.COMPLETE. INIT получает триггер после загрузка завершена и все классы / экземпляры в загруженном SWF инициализированы и готовы к использованию.

var loader:Loader = new Loader(); 
loader.contentLoaderInfo.addEventListener(Event.INIT, handleInit);
addChild(loader);

function handleInit(e:Event):void{
var as2Movie:AVM1Movie = e.target.content as AVM1Movie;
}

Вы можете получить доступ к загруженному контенту через свойство content класса Loader. Не то чтобы, поскольку вы загружаете фильм as2 в фильм as3, применяются некоторые ограничения:

"AVM1Movie - это простой класс, представляющий видеоклипы AVM1, в которых используется ActionScript 1.0 или 2.0. (AVM1 - это виртуальная машина ActionScript, используемая для запуска ActionScript 1.0 и 2.0. AVM2 - это виртуальная машина ActionScript, используемая для запуска ActionScript 3.0.) Когда Flash Player 8 или более ранний SWF-файл загружается объектом Loader, создается объект AVM1Movie. Объект AVM1Movie может использовать методы и свойства, унаследованные от класса DisplayObject (например, x, y, width и т. Д.) Однако совместимость (например, вызов методов или использование параметров) между объектом AVM1Movie и объектами AVM2 не допускается.

Существует несколько ограничений для SWF-файла AVM1, загружаемого SWF-файлом AVM2:

Загруженный объект AVM1Movie работает как объект psuedo-root для SWF-файла AVM1 и всех загруженных им SWF-файлов AVM1 (как если бы для свойства lockroot ActionScript 1.0 было установлено значение true). Фильм AVM1 всегда является вершиной любого выполнения кода ActionScript 1.0 или 2.0 в любых дочерних элементах. Свойство _root для загруженных потомков всегда является этим SWF-файлом AVM1, если только свойство загруженного корня не установлено в загруженном SWF-файле AVM1. Содержимое AVM1 не может загружать файлы по уровням. Например, он не может загружать файлы, вызывая loadMovieNum («url», levelNum). SWF-файл AVM1, загруженный SWF-файлом AVM2, не может загрузить в него другой SWF-файл. То есть он не может загрузить другой SWF-файл поверх самого себя. Однако дочерние объекты Sprite, объекты MovieClip или другие SWF-файлы AVM1, загруженные этим SWF-файлом, могут загружаться в него. "Из документов as3.

Для получения дополнительной информации см. Справочник AMV1Movie .

Если вы хотите вызвать as2 фильмы из as3, вам нужно будет использовать Local Connection для установления связи между 2 swfs.

Грант Скиннер написал удобную вещь под названием SWF Bridge для такого рода ситуаций (простое общение от as2 до as3). Стоит попробовать.

Гудлак!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...