AS3 Stop external swf

Привет, я загружаю внешний 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 к мувиклипу и остановить его там, он остановится, но проиграет первый кадр. Есть ли способ остановить его при загрузке, пока я не выберу «Играть»?


person Robin    schedule 02.03.2010    source источник
comment
Вы когда-нибудь находили для этого решение? Документация от Adobe по этому поводу, похоже, не существует :-(   -  person Marijn Huizendveld    schedule 01.04.2010
comment
Если вы загружаете SWF-файл с анимированными фрагментами роликов / спрайтами на сцене, вам необходимо остановить () анимацию детей.   -  person dejjub-AIS    schedule 19.06.2012


Ответы (3)


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

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

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

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

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

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

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

person DaveGauer    schedule 06.04.2011

Я написал этот простой 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();
        }
    }
}
person jochil    schedule 02.03.2010

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

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

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

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

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

person Pedro Guglielmo    schedule 15.06.2011