AS3停止外部swf

时间:2010-03-02 18:37:26

标签: actionscript-3 flash external loader

您好我正在将一个外部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添加到movieclip并在那里停止,它将停止但它将播放第一帧。有没有办法让它在加载时保持停止直到我选择播放?

3 个答案:

答案 0 :(得分:6)

这实际上与Jochen Hilgers建议的非常接近。但是,在这种情况下,您想要的事件实际上是INIT而不是COMPLETE。当内容尚未完全加载但已准备好使用(并将自行开始播放)时会触发INIT

使用

附加活动
loader.contentLoaderInfo.addEventListener(Event.INIT, handleReady );

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

您会注意到,您可以将content currentTarget属性作为MovieClip投射,并在将其附加到舞台之前将其停止。

请务必注意,在content事件中(或PROGRESSINIT事件之前的任何时间)使用COMPLETE属性并不安全。您将收到一个错误,指出对象尚未就绪。

答案 1 :(得分:1)

我写了这个简单的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();
        }
    }
}

答案 2 :(得分:0)

我正在寻找类似的问题/解决方案,但我的问题差别不大。我知道这不是你的问题,但看起来很公平地分享我的解决方案。我试图做的时候

    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文件的类。