【问题标题】:Embedded .swf animation not stopping on stop() call?嵌入式 .swf 动画不会在 stop() 调用时停止?
【发布时间】:2012-08-27 07:33:15
【问题描述】:

我有一个在 Flash Professional 中创建的 .swf 动画。为了在我的 actionscript 项目中使用它,我将它嵌入如下:

[Embed(source="../lib/fetching.swf")]
public var Fetching:Class;

然后我创建一个实例并将其添加到阶段,如下所示:

//class variable
var mc:MovieClip;

mc = new Fetching();
this.addChild(mc);

这会导致我的动画出现在屏幕上并无限循环。但是,当调用mc.stop() 时,动画不会停止。我尝试通过调用 removeChild(mc) 从舞台上删除影片剪辑,但在 ENTER_FRAME 事件上添加一个侦听器告诉我,影片剪辑仍在一遍又一遍地播放。

【问题讨论】:

    标签: actionscript-3 flash actionscript


    【解决方案1】:

    您应该设置一个嵌入源 mimeType,然后转换为 ByteArray。并加载。因为您不能将类型转换获取类定向到 MovieClip。如果你明确定义 mimeType 并强制转换,你会得到大约TypeError #1034: Type Coercion failed: cannot convert YourProject_Fetching@108b780d1 to flash.display.MovieClip

    参考以下代码。

    package
    {
        import flash.display.Loader;
        import flash.display.MovieClip;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.utils.ByteArray;
    
        public class TestProject extends Sprite
        {
            [Embed(source="../lib/fetching.swf", mimeType="application/octet-stream")]
            public var Fetching:Class;
    
            public var loader:Loader = new Loader();
    
            private var mc:MovieClip;
    
            public function TestProject()
            {
                loader.loadBytes( new Fetching() as ByteArray );
                loader.contentLoaderInfo.addEventListener(Event.INIT, onSwfLoaded);
                this.addChild(loader);
            }
    
            private function onSwfLoaded(e:Event):void 
            {
                mc = loader.content as MovieClip;
                mc.stop();
            }
        }
    }
    

    【讨论】:

    • swf 文件扩展了movieClip,那么您为什么不能这样投射呢?
    • 我一直不使用嵌入的 swf 文件。仅使用加载器。所以我不知道确切的原因。但我知道参考这篇文章:(1):embedded-movieclip-gotcha(2):embed movieclip from external swf runtime error(3):problems-with-embedding-swfs-in-actionscript-or-flex
    • 当您嵌入 SWF 时,您得到的是扩展 Loader 而不是 MovieClip 的东西。此加载程序将调用 LoadBytes(),并使用包含 SWF 的嵌入式 ByteArray。仅当您在 SWF 中嵌入特定符号时,嵌入的对象才会是 MovieClip。
    • 在加载器上调用 stop() 当然不会停止它已经加载的电影。
    • @wvxvw 我有点跑题了。当您嵌入整个 SWF 时,您得到的是 MovieClipLoaderAsset 的子类,它是一个包含 Loader 的剪辑,它从嵌入的 ByteArray 加载影片。不过,这点或多或少是一样的。
    【解决方案2】:

    您是否检查过嵌入式剪辑是为 AVM2 编译的(即它针对的是 AS3 而不是 AS1 或 AS2)? Avm1 swf 可以转换为 MovieClip 而不会引发错误,但不会响应命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-01
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多