如何检索添加到MovieClip的子项?

时间:2015-10-16 01:25:07

标签: actionscript-3 flash

我有一个由几个时间轴组成的.fla文件,并且不断添加和删除动画片段。

我需要以编程方式从添加和删除动画片段中获取一些信息,问题是,我无法捕获它,我有这个:

private function swfLoadedHandler(e:Event):void {

        var mc:MovieClip = e.currentTarget.content;
        mc.addEventListener(Event.ADDED, onAdded);

}

然后我在事件处理程序中得到了这个:

private function onAdded(e:Event):void {

   trace(e.target.name);


}

所有子项都会导出为actionscript动画片段并具有实例名称。如果我手动循环它们,我可以找到它们,但事件不会。

该示例中的目标而不是beign我最近添加的movieclip是一个“Shape”,其名称类似于isntanceNN。

任何想法可能出错?。

2 个答案:

答案 0 :(得分:-1)

虽然这不是最好的主意,但您可以使用.name属性;

private function swfLoadedHandler(e:Event):void {
    var mc:MovieClip = e.currentTarget.content;
    mc.name = "myMc";
    mc.addEventListener(Event.ADDED, onAdded);
}

private function onAdded(e:Event):void {
   trace(e.target.name); //myMc
}

如果仍然没有,请检查如果您有嵌套的动画片段,则表示您正在接收内部对象的实例名称。

答案 1 :(得分:-1)

你应该使用ADDED_TO_STAGE事件, mc.addEventListener(Event.ADDED_TO_STAGE, onAdded); 因为这个事件没有泡沫。您当前捕获的ADDED事件将触发mc中所有内部对象的侦听器。或者您应该追踪currentTarget而不是target。但最好同时使用两者:

private function swfLoadedHandler(e:Event):void {
    var mc:MovieClip = e.currentTarget.content;
    mc.addEventListener(Event.ADDED_TO_STAGE, onAdded);
}

private function onAdded(e:Event):void {
   trace(e.currentTarget.name);
}

这应该可能有帮助

更新:确定。如果您需要将直接添加到动画片段中的对象,那么您可能应该检查他们的父母?

private function swfLoadedHandler(e:Event):void {
    var mc:MovieClip = e.currentTarget.content;
    mc.addEventListener(Event.ADDED, onAdded);
}

private function onAdded(e:Event):void {
   const myMc:DisplayObject = e.currentTarget as DisplayObject;
   const addedObject:MovieClip = e.target as MovieClip;

   if (addedObject && (addedObject.parent == myMc)) {
       trace(addedObject.name);
   } else {
       trace(addedObject.name + ", [not interested!]");
   }
}