Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Загрузка внешнего ролика AS2 в контейнер AS3 (http://www.flasher.ru/forum/showthread.php?t=142689)

Danila 28.07.2010 12:31

Загрузка внешнего ролика AS2 в контейнер AS3
 
Всем добрый день!

Есть флэш-сайт: оболочка-навигация с подгрузкой отдельных swf, все скомпилировано в AS3. Нужно добавить новые разделы, например несложную флэш-игру, но ее можно выполнить только в AS2.

На пробу я делал подстановку своим роликом (простая анимация по ключевым кадрам без всякого кода) вместо одного из разделов и картина следующая: ролик скомпилированный в AS3 крутился безо всяких проблем, ролик AS2 подвешивал сайт полностью. В чем причина - движке сайта или приципиальной невозможности поднятого вопроса я пока разобраться не смог.

Принципиально, есть возможность загрузки AS2 в AS3 или нет ? Или может быть есть возможность дочерний ролик, без переписывания кода скомпилировать все-таки под AS3 малой кровью ?

Спасибо.

kiraml 28.07.2010 14:10

да есть, загружаеться обычным лоадером в АS3
Код AS3:

loader = new Loader();
urlRequest = new URLRequest(url);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadDataComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError)
loader.load(urlRequest, new LoaderContext(true));
 
private function loadComplete(e:Event)void {
        loader = (e.currentTarget);
 
        element_mc.addChild(loader);
}

element_mc - мувик в ас3, url - адресс флешки которая написана на аs2, new LoaderContext(true) - необезательный параметр (загружать или не загружать crossdomain)

Danila 28.07.2010 19:53

Благодарю за быстрый ответ, kiraml.

Чтобы проверить я создал пустой мувик AS3, в первом кадре разместил ваш пример, заменив element_mc на ключевое слово this. Кстати, компилятор ругался на переменные loader и urlRequest до тех пор, пока я не поставил var перед ними.

Еще была ошибка в том, что слушателе событий указан loadDataComplete вместо loadComplete. Все это я пофиксил, но вот беда - при запуске этого контейнера компилятор выдал в непрерывном цикле ошибку:

Цитата:

TypeError: Error #1034: Type Coercion failed: cannot convert
flash.display::LoaderInfo@2bd91041 to flash.display.DisplayObject.
at game_fla::MainTimeline/loadComplete()

Котяра 28.07.2010 20:49

потому что loader = (e.currentTarget);// тут ошибка

e.currentTarget!= loader это contentLoaderInfo.
сделайте в классе:

Код AS3:

public var loader = new Loader();
public va urlRequest = new URLRequest(url);
 
public function load():void
{
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError)
loader.load(urlRequest, new LoaderContext(true));
}
private function loadComplete(e:Event)void {
        element_mc.addChild(loader);
}


Danila 29.07.2010 10:41

Котяра, я использовал ваш пример, ошибок компилятор не выдает, однако указанный в url ролик не отображается.

Я пробовал подставить тестовый трейс, и похоже, даже не происходит вызова loadComplete, и вызов ioError тож не происходит, даже если url намеренно был искажен.

Вобщем, и целом всем спасибо. Видимо, нахрапом мне эту проблему не решить придется досконально изучить AS3.

PS: Хочу также поблагодарить всех участников форума помогающих новичкам. Уже долгое время ваши добрые советы помогали мне решить многие проблемы. Всем спасибо!


Часовой пояс GMT +4, время: 01:46.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.