在第2帧上加载嵌入SWF?

时间:2014-11-28 11:02:16

标签: actionscript-3

是否可以在第2帧上加载嵌入另一个swf的swf?

我需要制作一个包含声音swf的主swf。声音swf包含导出的声音文件,用于在代码中实例化。声音swfs根据主swf的版本而变化,因此希望在编译时嵌入。我目前使用[Embed]元数据标签将声音swf嵌入到主swf代码中,这些标签都可以正常工作。但是,这似乎加载了第1帧上的swfs,我宁愿它在我的预加载器运行后加载到第2帧。

我已经在网上查了一下这个问题好像被问到但从未真正回答。

为了澄清,我在一个主类中嵌入一个swf及其符号,代码如下:

[Embed(source = 'sound.swf', symbol = 'music')] public var music:Class;

嵌入swf和符号加载到初始主swf负载上。如果我将声音swf设置为在帧2上导出,则它不会编译。主帧上的库内容加载到第2帧上,以允许第1帧中的预加载器运行。我试图找出是否有办法使sound.swf中的资产也加载到frame2上。

1 个答案:

答案 0 :(得分:0)

这似乎为我解决了这个问题。示例代码如下。我嵌入了一个包含声音资源的swf,但是使用“application / octet-stream”作为mimeType。然后我可以使用ActionScript Loader类“加载”swf。然后可以使用“getDefinitionByName”实例化加载的swf中的符号。此外,如果您有对加载的swf的引用,则可以使用“getDefinition”进行实例化,请参阅下面注释掉的行。到目前为止,这对我有用。

package
{
    import flash.display.Loader;
    import flash.display.MovieClip;
    import flash.media.Sound;
    import flash.events.Event;
    import flash.system.LoaderContext;
    import flash.system.ApplicationDomain;
    import flash.utils.getDefinitionByName;

    public class TestEmbed extends MovieClip
    {
        [Embed(source="EmbedAudio.swf", mimeType="application/octet-stream")]
        public var EmbedAudio : Class;
        public function TestEmbed()
        {
            super();

            // load embed swf
            var context : LoaderContext = new LoaderContext (false,ApplicationDomain.currentDomain);
            context.allowCodeImport = true;
            var loader : Loader = new Loader ();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_complete);
            loader.loadBytes (new EmbedAudio (), context);

        }

        private function loader_complete(evt:Event):void {
            // instantiate the class
            /*var ClassDefinition:Class = evt.target.applicationDomain.getDefinition("k3n1_01") as Class;*/
            var ClassDefinition:Class=getDefinitionByName("k3n1_01") as Class;
            var k3n1_01:Sound = new ClassDefinition();
            k3n1_01.play();
        }
    }
}