3

我有一个在 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 事件上添加一个侦听器告诉我,影片剪辑仍在一遍又一遍地播放。

4

2 回答 2

3

您应该设置一个嵌入源 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();
        }
    }
}
于 2012-09-02T03:13:52.380 回答
1

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

于 2012-09-02T10:59:09.353 回答