我有一个主要的“父”swf加载其他几个swf。如果在主swf中发生了什么,我需要告诉其中一个子swf。
从另一个角度看,这似乎也很有效。任何子类都可以简单地使用dispatchEvent(),我可以设置主swf来监听事件。但是,我无法使子swf捕获父swf发送的任何事件。它是如何做到的?
发布于 2009-11-12 22:43:06
在父swf (Index.swf)中加载子swf (Main.swf)时,请在字段变量或类变量中保留引用
fldMain = BulkLoader.getLoader("Index").getContent("Main.swf") as DisplayObject;
this.addChild(fldMain);(我正在使用加载任何内容)
最好等到添加子事件(ADDED_TO_STAGE事件)时再调度事件
当我想给我的孩子分派一个事件时,我只需说:
fldMain.dispatchEvent(new CustomEvent(CustomEvent.INIT_CHILD,data));发布于 2009-09-26 18:58:21
我会倾听每个孩子的心声
Event.ADDED_TO_STAGE一旦将其添加到舞台上,您就可以引用/侦听舞台上的事件。
示例
//Child
if(stage) _init(); //Already added
else addEventListener(Event.ADDED_TO_STAGE, _init); //waiting to be added
private function _init(e:Event = null):void
{
stage.addEventListener(CustomEvent.CHANGED, _onStageChanged);
{我没有对此进行测试,但只要您将事件从舞台上分派出去,它就应该可以工作。
//stage
dispatchEvent(new CustomEvent(CustomEvent.CHANGED));如果你正确地设置了你的自定义事件类,你也可以传递信息。
发布于 2009-12-24 02:22:21
我所做的是在将子元素添加到舞台后,在父元素上添加一个监听程序以进行更改。现在,只要你想让子进程处理自我更新,只需从父进程发送Event.CHANGE即可。冒泡可以是真的,也可以是假的。
我认为,如果您将孩子的侦听器附加到舞台(stage.addEventListener...),任何抛出Event.CHANGE的对象都可以触发孩子处理事件。
package
{
import flash.display.*
import flash.events.*
public class Child extends Sprite
{
public function Child():void
{
this.addEventListener(Event.ADDED_TO_STAGE, addedToStageHandler, false, 0, true);
}
private function addedToStageHandler(pEvent:Event):void
{
trace("CHILDADDED");
this.removeEventListener(Event.ADDED_TO_STAGE, addedToStageHandler);
this.parent.addEventListener(Event.CHANGE, parent_changeEventHandler, false, 0, true);
}
private function parent_changeEventHandler(pEvent:Event):void
{
trace("PARENT_CHANGED");
}
}
}https://stackoverflow.com/questions/1387568
复制相似问题