AS3嵌入访问子动画片剪辑

时间:2011-09-11 03:02:09

标签: flash flex actionscript-3

所以我使用此代码嵌入我的.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...

2 个答案:

答案 0 :(得分:2)

据我所知。

可能有解决方法。

如果您是从Flash IDE创建这些子项,则应该可以通过以下引用直接访问它们:

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

或者如果你在swf中手动执行MovieClip初始化(new operator),你也可以像这样手动创建这些引用:

child["child_child_name"] = child_child;

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

child.child_child_name = child_child;

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

答案 1 :(得分:1)

如果您的主文档类声明实例(即“自动声明舞台实例”),则只需将swf转换为文档类。

所以,

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

您应该考虑在主文档Class上公开一个接口,以便其他类不需要知道它特别是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/)