AS3 Стоп внешний SWF - PullRequest
       27

AS3 Стоп внешний SWF

7 голосов
/ 02 марта 2010

Привет, я загружаю внешний SWF-файл в MovieClip и хочу, чтобы он остановился, пока я не выберу игру. В данный момент проигрывается сразу после загрузки.

var mc:MovieClip;

var swfLoader:Loader = new Loader();
swfLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, eventLoaded); 
var request:URLRequest;
request = new URLRequest("external.swf");
swfLoader.load (request);

function        eventLoaded(e:Event): void
{
   mc = e.target.content as MovieClip;
// does not stop the clip
   mc.Stop ();
}

Итак, я попытался добавить Event.ENTER_FRAME в мувиклип и остановить его там, который остановится, но он будет воспроизводить первый кадр. Есть ли способ заставить его оставаться остановленным при загрузке, пока я не выберу Play?

Ответы [ 3 ]

6 голосов
/ 07 апреля 2011

Это на самом деле очень близко к тому, что предложил Йохен Хилгерс. Однако в этом случае требуемое событие на самом деле INIT вместо COMPLETE. INIT запускается, когда контент еще не полностью загружен, но готов к использованию (и начнет воспроизводиться самостоятельно).

Присоедините событие с помощью

loader.contentLoaderInfo.addEventListener(Event.INIT, handleReady );

И справиться с этим

public function handleReady( initEvent:Event ):void{
        MovieClip(initEvent.currentTarget.content).stop();
}

Вы заметите, что вы можете разыграть свойство content currentTarget в качестве мувиклипа и остановить его даже до того, как оно будет прикреплено к сцене.

Важно отметить, что использование свойства content небезопасно в событии PROGRESS (или в любое время до события INIT или COMPLETE). Вы получите ошибку о том, что объект не готов.

1 голос
/ 02 марта 2010

Я написал этот простой TestCase, и он отлично работает ... загруженный SWF-файл довольно прост, просто анимация на основной временной шкале.

package {
    import flash.display.Loader;
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.URLRequest;

    public class Test extends Sprite
    {
        private var loader:Loader = new Loader;

        public function Test()
        {
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoaded );
            loader.load( new URLRequest( 'testFile.swf' ) );    
        }

        public function handleLoaded( event:Event ):void
        {
            addChild( loader.content );
            var mc:MovieClip = loader.content as MovieClip ;
            mc.stop();
        }
    }
}
0 голосов
/ 15 июня 2011

Я искал похожую проблему / решение, но моя проблема была немного другой. Я знаю, что это не ваша проблема, но выглядит справедливо, чтобы поделиться своим решением. Когда я пытался сделать

    event.currentTarget.stop(); // AS1&AS2 -> BAD swf to import

с содержимым загрузчика, моя Flash IDE показала мне эту ошибку:

"Остановка свойства не найдена на flash.display.AVM1Movie и значение по умолчанию отсутствует."

Это произошло со мной, потому что импортированный мной SWF-файл был создан с использованием AS1, а не AS3 в качестве основного фильма (поэтому я декомпилировал SWF-файл во FL и перекомпилировал с использованием as3, это был выход из After Effects). Теперь я знаю, что AVM1 и AVM2 - это классы, представляющие файлы ActionScript 1 и 2.

...