我有一个简单的Flash文档,舞台上只有一个矩形。我已经将矩形设置为一个符号,一个MovieClip,并将其实例名设置为"test_symbol_name“。我已经将这个文档发布到了一个.swf中。(这是.fla和.swf)
在一个AS3 Flash项目中,我用一个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起名字?
这是正确的方法,还是有更好的方法来达到我的符号实例?
发布于 2011-04-20 13:34:56
您可以使用getChildAt(0)代替这个随机名称(afaik,它是swf的容器)。但是,我认为最安全的方法是将您的剪辑引用为documentClass成员(公共变量),或者如果您需要它在父电影中使用,则导出actionscript的符号,并在加载完后从父电影中创建一个新实例:
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);
}https://stackoverflow.com/questions/5729330
复制相似问题