actionscript-3 – as3 – 从父swf到子swf的dispatchEvent
我有一个主要的“父”swf加载其他几个swfs.如果在主SWF中发生了某些事情,我需要告诉其中一个孩子swf.
这似乎相反,相反.任何一个孩子都可以简单地调用Event(),我可以设置主swf来监听事件.但是,我无法让子swf捕获父级调度的任何事件.怎么做? 解决方法
好的,所以如果你已经知道了大部分内容,我很抱歉……但这似乎是一个非常普遍的问题,并不是很明显.
在AS3中,可以监听由显示列表上的对象调度的事件,因为它们冒泡显示列表层次结构而无需指定源对象. (当然假设事件的冒泡属性设置为true).因此,文档类(_root的旧概念)可以响应任何显示对象的鼠标点击,无论嵌套有多深, addEventListener(MouseEvent.CLICK,_onMouseClick) 在任何其他情况下 – 例如bubbling设置为false,广播器不是显示列表上的InteractiveObject,或者(在您的情况下)侦听器低于显示列表层次结构中的广播器 – 广播事件的对象必须专门监听: fooInstance.addEventListener(Event.BAR,_bazFunc) ?而不是公正的 addEventListener(Event.BAR,_bazFunc) 基本上,您需要将对父对象的引用传递给子swf,以便它可以将事件处理程序附加到它. 一种方法是通过显示列表将子事件从子类调度到父类(一旦子项加载并完全初始化).父级使用此事件的event.target属性来引用子级并在其上设置parentClass变量.然后可以使用它来附加侦听器: package { class ChildClass { private var __parentClass:ParentClass; // EventID to listen for in ParentClass public static const INITIALISED:String = "childInitialised"; // Constructor function ChildClass() { // Do initialising stuff,then call: _onInitialised(); } private function _onInitialised():void { // Dispatch event via display hierarchy // ParentClass instance listens for generic events of this type // e.g. in ParentClass: // addEventListener(ChildClass.INITIALISED,_onChildInitialised); // function _onChildInitialised(event:Event):void { // event.target.parentClass = this; // } // @see mutator method "set parentClass" below dispatchEvent(new Event(ChildClass.INITIALISED,true); } public function set parentClass(value:ParentClass):void { __parentClass = value; // Listen for the events you need to respond to __parentClass.addEventListener(ParentClass.FOO,_onParentFoo,false,true); __parentClass.addEventListener(ParentClass.BAR,_onParentBar,true); } private function _onParentFoo(event:Event):void { ... } } } 调度自定义的ChildSWFEvent – 即不使用上面定义的类定义 – 将使这更加灵活,因为ParentClass实例可以监听任何子swf广播的常见ChildSWFEvent.INITIALISED事件,并将上下文有用的信息作为附加信息传递参数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |