Actionscript 3 访问嵌入式aswf的子级
我正在嵌入一个swf文件,它的时间轴上有一些子文件。像这样:Actionscript 3 访问嵌入式aswf的子级,actionscript-3,flash,embedding,Actionscript 3,Flash,Embedding,我正在嵌入一个swf文件,它的时间轴上有一些子文件。像这样: [Embed(source="assets/skyscraper200x600.swf")] private var Skyscraper :Class; swf中的所有子级都有一个实例名,我在FlashCS5中创建swf时仔细检查了这一点。 我试图通过以下名称访问这些孩子: _bg = MovieClip(new Skyscraper()); _pig = MovieClip(_bg.getChildByName("chara_
[Embed(source="assets/skyscraper200x600.swf")]
private var Skyscraper :Class;
swf中的所有子级都有一个实例名,我在FlashCS5中创建swf时仔细检查了这一点。
我试图通过以下名称访问这些孩子:
_bg = MovieClip(new Skyscraper());
_pig = MovieClip(_bg.getChildByName("chara_pig"));
_arrow = MovieClip(_bg.getChildByName("arrow_banner"));
但是_pig和_arrow最终都是空的
更奇怪的是,当我在调试器中查看摩天大楼对象时,它显示了一个相当奇怪的类名和一个加载程序作为其唯一的子对象(而它又没有子对象)。这是怎么回事
如果我不嵌入swf,而是使用加载程序加载它,我可以像上面那样访问它们。但我不能在这种情况下这样做。我需要嵌入swf
那么,如何访问嵌入式主权财富基金的子级呢
我说的不是访问嵌入式swf库中的类,而是时间轴上的实例。一个解决方案是将swf作为一个实例嵌入。然而,我似乎记得在某个地方读到过,如果你只是将mimeType设置为“application/x-shockwave-flash”,你会得到一个正常工作的MovieClip。一个解决方案是将swf作为一个插件嵌入,然而,我似乎记得在某个地方读到,如果你只是将mimeType设置为“application/x-shockwave-flash”,您会得到一个正常工作的MovieClip。在本教程的末尾,有一个如何完成的示例在本教程的末尾,有一个如何完成的示例这里是一个解决方案。您还可以看到帮助我找到此解决方案的步骤(DescripteType是您的朋友):
这里有一个解决方案。您还可以看到帮助我找到此解决方案的步骤(DescripteType是您的朋友):
这对于在类中显式导出到AS3的符号非常有用。但这正是我不想要的。我想要的是时间轴上的命名实例,而不是它们的类。这对于类中显式导出到AS3的符号非常有用。但这正是我不想要的。我想要的是时间轴上的命名实例,而不是它们的类。但我们把它改成了AS3。不幸的是,这并没有改变任何事情。一开始是这样的。但我们把它改成了AS3。不幸的是,这并没有改变什么。当尝试将其作为八位字节流加载(通过Loader.loadBytes(new class())时,它告诉我该文件包含一些无效数据。而将mimeType设置为“application/x-shockwave-flash”只会改变什么。当尝试将其作为八位字节流加载(通过Loader.loadBytes(new class())时,它告诉我该文件有一些无效数据。并将mimeType设置为“application/x-shockwave-flash”简单地说什么都不改变。工作起来像个符咒。谢谢!谁想出了让嵌入SWF与加载SWF完全不同的坏主意?奇怪。工作起来像个符咒。谢谢!谁想出了让嵌入SWF与加载SWF完全不同的坏主意?奇怪。
public class Demo extends Sprite {
[Embed(source="test.swf")]
private var Test:Class
public function Demo() {
//first guess is that embed SWF is a MovieClip
var embedSWF:MovieClip = new Test() as MovieClip;
addChild(embedSWF);
//well, emebed SWF is more than just a MovieClip...
trace(describeType(embedSWF));//mx.core::MovieClipLoaderAsset
trace(embedSWF.numChildren);//1
trace(describeType(embedSWF.getChildAt(0)));//flash.display::Loader
var loader:Loader = embedSWF.getChildAt(0) as Loader;
//the content is not already loaded...
trace(loader.content);//null
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(){
var swf:MovieClip = loader.content as MovieClip;
var child:MovieClip = swf.getChildByName("$blob") as MovieClip;
//do nasty stuff with your MovieClip !
});
}
}