是否可以在第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上。
答案 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();
}
}
}