Flash AS3-从子级到父级的事件时间线

Flash AS3-从子级到父级的事件时间线,flash,actionscript-3,event-handling,air,Flash,Actionscript 3,Event Handling,Air,我想做的事情似乎很简单,但我想在Flash的时间线内工作,而不是在自定义类内工作。如文件、flex等。我是一名艺术家,代码的可重用性仅与我的资产(在Flash中创建/设置动画)相同,因此我倾向于在时间线内工作 我希望在孩子的时间轴末尾有一个脚本,它可以推进父母的时间轴。如果它是一个真正的AS3脚本,那么类似这样的内容将出现在子脚本的结束帧上:this.parent.gotoAndPlay(2) 我已经完成了“修复”这项工作,但将我的程序速度降低到了无法接受的程度。例如:我将在导入的自定义类中保存

我想做的事情似乎很简单,但我想在Flash的时间线内工作,而不是在自定义类内工作。如文件、flex等。我是一名艺术家,代码的可重用性仅与我的资产(在Flash中创建/设置动画)相同,因此我倾向于在时间线内工作

我希望在孩子的时间轴末尾有一个脚本,它可以推进父母的时间轴。如果它是一个真正的AS3脚本,那么类似这样的内容将出现在子脚本的结束帧上:this.parent.gotoAndPlay(2)

我已经完成了“修复”这项工作,但将我的程序速度降低到了无法接受的程度。例如:我将在导入的自定义类中保存一个公共静态布尔值,并在父帧1上有一个“侦听器”:

导入自定义类;if(Boolean=true){gotoAndPlay(3);}//正在等待孩子

在父帧2上:

gotoAndPlay(1);//这就产生了廉价的循环

在最后一个子帧上:

导入自定义类;Boolean=true//告诉父级何时离开其循环

这是可行的,但显然不是最好的方法。。。我需要的是在同一时间线框架内的递归,但没有堆栈溢出或编号增量

我怀疑答案在于EventListener,但我不想用鼠标点击或计时器触发它,我想这样触发它:new EventListener:EventListener(TheGlobalvarattheEndofyYourChildTimeLine已更改);当布尔值更改为true时,它将继续

我相信这很容易,我觉得自己像个白痴,问了这么简单的问题,但是所有的文档都让我在舞台上工作,或者在我用代码创建的对象中使用一个对象,但是我想做的事情并不是那么容易,因为我正在制作使用多个时间线的复杂动画。Flash知道哪个对象在什么范围内,而不是我或我的类


感谢您的帮助。

主时间线可以发送和收听事件,并将必要的信息发送给相关儿童

在子实例中,您可以编写

var dispatcher:MovieClip = this.root as MovieClip; dispatcher.dispatchEvent( new Event('last frame reached') ); var dispatcher:MovieClip=this.root作为MovieClip; dispatcher.dispatchEvent(新事件(“到达最后一帧”); 在主时间表中

this.addEventListener( "mc1 last frame reached" , eventListener ); function eventListener(event:Event):void { //should return your event name trace( event.type ); //you could use a switch statement to redirect to a specific function switch(event.type ) { case "mc1 last frame reached": this.instanceName1.instanceName2.gotoAndPlay(n); break; case "mc2 last frame reached": this.instanceName1.instanceName4.gotoAndPlay(n); break; ///etc... } } addEventListener(“到达mc1最后一帧”,eventListener); 函数eventListener(事件:事件):void { //应该返回您的事件名称 跟踪(event.type); //可以使用switch语句重定向到特定函数 开关(event.type) { 案例“到达mc1最后一帧”: this.instanceName1.instanceName2.gotoAndPlay(n); 打破 案例“mc2到达最后一帧”: this.instanceName1.instanceName4.gotoAndPlay(n); 打破 ///等等。。。 } }
我个人会使用一个自定义事件,在这里我可以传递子对象的实例名以及在主时间轴中触发新函数所需的任何属性。孩子可以调度事件,但我倾向于使用root作为前端控制器。

这将是干净的方法。。我认为,在主时间线中,它应该是child.addEventListner(…)实际上,root确实代表flash中最顶层的对象。。子实例可以只调用自己的dispatchEvent方法(并执行child.addEventListener)我使用根作为前端控制器,这样您就有了一个dispatcher,这让我意识到我在上一次编辑中实际上犯了一个错误。。。