Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   как отследить окончание загружаемого клипа? (http://www.flasher.ru/forum/showthread.php?t=140353)

tanyakora 27.05.2010 12:44

как отследить окончание загружаемого клипа?
 
Подскажите, пожалуйста, вроде бы вопрос не из самых сложных, но что-то я на этом застопорилась:( Подгружаю swf файл:
Код AS3:

var context:LoaderContext = new LoaderContext();
if (Security.sandboxType!='localTrusted'){
        context.securityDomain = SecurityDomain.currentDomain;
}
context.applicationDomain = ApplicationDomain.currentDomain;
var loader1 = new Loader();
var url1=new URLRequest(stringURL);
loader1.load(url1, context);
loader1.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
loader1.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
private function onLoaded(e:Event):void {
      mc = new MovieClip();
 
    //mc=e.target.content as MovieClip;не работает - пишет, что объект null
 
    mc.addChild(e.target.content as DisplayObject);                               
}

Каким образом можно отследить окончание проигрывания этого клипа? (для удаления его из памяти).

dimarik 27.05.2010 15:22

Вот это Вам зачем?

Код AS3:

mc = new MovieClip();

Код AS3:

private function onLoaded(e:Event):void {
        var content:DisplayObject = e.target.content;
 
        if (content is MovieClip) {
                var mc:MovieClip = content as MovieClip;
 
                mc.addFrameScript(
                        mc.totalFrames - 1,
                        function(mc:MovieClip):Function {
                                return function():void {
                                        mc.stop();
                                        if (mc.parent) {
                                                mc.parent.removeChild(mc);
                                        }
                                        mc.addFrameScript(mc.currentFrame - 1, null);
                                }
                        }(mc)
                );
 
                super.addChild(mc);// Ну или куда вы там его добавить собирались
                mc.play();
        } else {
                trace(describeType(content));// шо за чудо?
        }
}


tanyakora 27.05.2010 15:52

Так в том то и дело, что "as MovieClip" не работает:
невозможно преобразовать flash.display::AVM1Movie@892a551 в flash.display.MovieClip.
Причина может скрываться в том, что подгружаемая флешка на AS2?

dimarik 27.05.2010 18:35

Именно так.

Используйте LocalConnection для обмена данными с AVM1Movie.

Также есть недокументированные методы AVM1Movie#call и AVM1Movie#addCallback. По сигнатуре аналогичны статическим методам класса ExternalInterface. В принципе, можно попытаться использовать и их.

Однако в перечисленных способах необходимо модифицировать подгружаемую swf.

Если это невозможно, то можно попытаться, например, зная заранее количество кадров в загружаемой swf, по счетчику кадров удалять (выгружать) swf на заданном кадре.

i.o. 27.05.2010 19:12

dimarik, расскажи, пожалуйста, поподробнее про AVM1Movie#call и AVM1Movie#addCallback

tanyakora 28.05.2010 12:01

Цитата:

Если это невозможно, то можно попытаться, например, зная заранее количество кадров в загружаемой swf, по счетчику кадров удалять (выгружать) swf на заданном кадре.
Да, я думаю, это подойдет. Спасибо большое.
P.S. не подскажете, где можно почитать про AVM1Movie?

udaaff 28.05.2010 12:11

http://help.adobe.com/ru_RU/AS3LCR/F...AVM1Movie.html

dimarik 29.05.2010 10:19

Цитата:

Сообщение от i.o. (Сообщение 911404)
dimarik, расскажи, пожалуйста, поподробнее про AVM1Movie#call и AVM1Movie#addCallback

Не ковырял еще ) Мне вот интересно, со стороны AVM1 мувика какое кун-фу нужно применять, чтобы зарегистрировать callback и сделать call?

i.o. 29.05.2010 13:36

я сразу подумал про ExternalInterface. Надо попробовать...

Добавлено через 2 часа 7 минут
нда, пока что облом со стороны AS3 в виде:
Цитата:

Error: Error #2014: Feature is not available at this time.
at Error$/throwError()
at flash.display::AVM1Movie/call()
at AS3Container/_onFullComplete()
at Function/http://adobe.com/AS3/2006/builtin::apply()
at SetIntervalTimer/onTimer()
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()
для addCallback тоже самое: Error: Error #2014: Feature is not available at this time.


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

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