我有一个由几个时间轴组成的.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。
任何想法可能出错?。
答案 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!]");
}
}