Flash:设置Flash文档的实例名称

时间:2011-04-20 11:14:20

标签: flash actionscript-3 naming-conventions

我有一个简单的Flash文档,在舞台上有一个矩形。我已将矩形设为符号,即MovieClip,并将其实例名称设置为“test_symbol_name”。我已将此文档发布到.swf。 (这是.fla.swf

在AS3 Flash Builder项目中,我使用Loader加载swf,然后使用此函数跟踪其显示列表中的所有内容:

    public static function traceDisplayList(container:DisplayObjectContainer, indentString:String = "->"):void {
        var child:DisplayObject;

        for (var i:uint=0; i < container.numChildren; i++) {
            child = container.getChildAt(i);
            trace(indentString, child.parent.name + " " + indentString + " " + child.name);

            if (container.getChildAt(i) is DisplayObjectContainer) {
                traceDisplayList(DisplayObjectContainer(child), indentString + "->");
            }
        }   
    }

这是输出:

-> instance471 -> instance472
->-> instance472 ->-> instance473
->-> instance472 ->-> test_symbol_name
->->-> test_symbol_name ->->-> instance474

我的符号已嵌套在instance472中,它位于instance471内。

我可以通过指定包含符号(472)来达到代码中的符号,如下所示:

var myTestSymbol:MovieClip = (loader.getChildByName('instance472') as DisplayObjectContainer).getChildByName('test_symbol_name') as MovieClip;

这是我的问题

什么是instance472和instance471?它们是文档和舞台,还是其他什么?

当我发布swf时,实例编号可以更改。我必须调整我的代码以匹配最新的数字,以使其工作。我如何命名instance471?

这是正确的方法,还是有更好的方法来覆盖我的符号实例?

1 个答案:

答案 0 :(得分:1)

你可以使用getChildAt(0)代替那个随机名称(afaik它是swf的容器)。但我认为最安全的方法是将剪辑作为documentClass成员(公共变量)引用,或者如果您需要在父电影中使用它,请导出动作脚本的符号,并在完成后从父电影中创建一个新实例加载它:

loader.contentLoaderInfo.addEventListener("init", contentReady);
function contentReady(e) {
    var clipdef:Object=loader.contentLoaderInfo.applicationDomain.getDefinition("MyClip");
    var myClip:MovieClip=new clipdef() as MovieClip;
    addChild(myClip);
}