【问题标题】:Access children of embedded aswf访问嵌入式 aswf 的子项
【发布时间】:2012-06-04 15:28:01
【问题描述】:

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

[Embed(source="assets/skyscraper200x600.swf")]
private var Skyscraper  :Class;

swf 中的所有子对象都有一个实例名称,我在 Flash CS5 中创建 swf 时仔细检查了该名称。 我正在尝试按这样的名称访问这些孩子:

_bg = MovieClip(new Skyscraper());
_pig = MovieClip(_bg.getChildByName("chara_pig"));
_arrow = MovieClip(_bg.getChildByName("arrow_banner"));

但是,_pig 和 _arrow 最终都为 null。

更奇怪的是,当我在调试器中查看 Skyscraper 对象时,它显示了一个相当奇怪的类名和一个 Loader 作为其唯一的孩子(而它又没有孩子)。这是怎么回事?

.

如果我不嵌入 swf,我可以像上面那样访问它们,而是使用加载器加载它。但在这种情况下我不能这样做。我需要嵌入 swf。

那么,如何访问嵌入式 swf 的子项?

不是谈论访问嵌入式 swf 库中的类,而是时间轴上的实例。

【问题讨论】:

  • 一开始是这样。但我们将其切换为 AS3。不幸的是,这并没有改变任何事情。

标签: actionscript-3 flash embedding


【解决方案1】:

这里有一个解决方案。您还可以查看帮助我找到此解决方案的步骤(describeType 是您的朋友):

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

【讨论】:

  • 像魅力一样工作。谢谢!谁想出了使嵌入 swf 与加载它们完全不同的坏主意?很奇怪。
【解决方案2】:

【讨论】:

  • 这对于在类中明确导出到 AS3 的符号很有用。但这正是我想要的。我想要的是时间轴上的命名实例,而不是它们的类。
【解决方案3】:

一种解决方案是将 swf 嵌入为 octet stream and reconstitute its bytes. 但是,我似乎记得在某处读过,如果您只是将 mimeType 设置为“application/x-shockwave-flash”,您将获得一个正常工作的 MovieClip。

【讨论】:

  • 当尝试将其作为八位字节流加载时(通过 Loader.loadBytes(new class()),它告诉我该文件有一些无效数据。并将 mimeType 设置为“application/x-冲击波闪光”根本没有改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多