Actionscript 3 访问嵌入式aswf的子级

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_

我正在嵌入一个swf文件,它的时间轴上有一些子文件。像这样:

[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 !
        });
    }
}