【问题标题】:AS3 Embed access child movieclipsAS3 嵌入访问子影片剪辑
【发布时间】:2011-09-12 19:27:13
【问题描述】:

所以我正在使用此代码嵌入我的 .swf 文件。我正在为我的库中的每个资产创建类。

[Embed('assets/assets.swf', symbol='game.menu.levels')]
public static const LEVELS_MENU:Class;

它工作得很好,但我怎样才能访问多个深度的子元素?

到目前为止我有这个:

this.object = new R.LEVELS_MENU();
var child_element:MovieClip = 
    this.object.getChildByName("child_element") as MovieClip;

有没有比这样做更好的方法:

var child_child_element:DisplayObjectContainer = 
        DisplayObjectContainer(
                child_element.getChildByName("child_child_element")
        );
var child_child_child_element:DisplayObjectContainer = 
        DisplayObjectContainer(
                child_child_element.getChildByName("child_child_child_element")
        );

有没有办法用点语法来做到这一点:

child_element.child_child_element.child_child_child_element...

【问题讨论】:

  • 我想我刚刚意识到,作为 SWC 导入然后以这种方式提取资产会更容易。

标签: flash apache-flex actionscript-3


【解决方案1】:

据我所知没有。

可能有解决方法。

如果您从 Flash IDE 创建了这些子项,您应该能够通过如下引用直接访问它们:

MovieClip(this.object).child1.child2.child3.child4;

或者,如果您在 swf 中手动执行 MovieClip 初始化(新操作符),您也可以像这样手动创建这些引用:

child["child_child_name"] = child_child;

虽然这对影片剪辑无关紧要,因为它们是动态的,所以你可以这样做:

child.child_child_name = child_child;

最后两个当然是在 .swf 代码中;

【讨论】:

  • 嗯,我已经尝试了所有这三个,它们都导致错误 #1009。请记住,这是在 Flash Builder 中,所以我嵌入了 .swf。
  • 好的,您的解决方案是正确的,我只需要将我的资产添加为 SWF 并将所有子元素导出到 actionscript。一旦我这样做了,它就像你上面所说的那样工作。谢谢。
【解决方案2】:

如果您的主文档类声明了实例(即“自动声明阶段实例”已关闭,则只需将 swf 转换为文档类。

所以,

var yourSwf:YourSwf = new LEVELS_MENU() as YourSwf;
var mc = yourSwf.child1;

您可能应该考虑在您的主文档 Class 上公开一个接口,以便其他 Classes 不需要知道它具体是 YourSwf。有关这方面的示例,请查看http://flexdiary.blogspot.com/2009/01/example-of-casting-contets-of-swfloader.html

请注意,您正在为一个受伤害的世界设置自己,使用一个静态类,其中类与其耦合以提供它们自己的依赖项。请至少考虑迁移到抽象工厂模式(http://www.as3dp.com/2009/01/25/actionscript-30-abstract-factory-design-pattern-multiple-products-and-factories/)

【讨论】:

    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2011-03-07
    • 2013-09-29
    • 2013-04-27
    • 2011-07-19
    相关资源
    最近更新 更多