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