我有时会遇到以下问题,而且我总是无法克服它。
我想解决方案必须以不同的方式提供,但我想找出为什么这种代码不起作用。
情景:
主类是Main.as,其中有一个Sprite1实例添加到Main displayList。 还有MyCustomClass实例,它在构造函数中引用Stage,以便能够调度MyCustomClass.ABC事件。
(在MyCustomClass中)
stageRef.dispatchEvent(new Event(MyCustomClass.ABC));
然后在我的Main中,sprite1实例放在Main的displayList上我想监听MyCustomClass事件调度的MyCustomClass.ABC事件。
最后,如果我将以下代码放在我的Main.as中:
sprite1.addEventListener(MyCustomClass.ABC, onABC);
它不起作用所以我必须通过Main类中的阶段引用直接订阅此事件。
stage.addEventListener(MyCustomClass.ABC, onABC);
我认为在捕获阶段,事件从Stage传播到所有子节点,而sprite1实例是Main的子节点,它是Stage的子节点。所以,对我来说它应该有效,但事实并非如此。
我在这个项目中创建了一个描述displayList对象的图像。请看 链接http://www.iv.pl/images/61170779800943350498.png
提前感谢任何解释为什么它不起作用。它不适用于我传递给侦听器(捕获)或调度程序(冒泡)的任何参数。
答案 0 :(得分:0)
捕获阶段事件从目标到阶段,而冒泡阶段从阶段到目标。当stage是目标时,显示列表中的任何对象都无法捕获该调度事件,因为它们不能包含在事件阶段中。目标(阶段)进入阶段,然后回到目标(阶段),两者之间没有任何东西可以捕获事件。
通常在使用stage来调度事件时,程序员希望利用阶段性全局性(可以论证的设计),但在这种类型的设计中,它也意味着只有阶段应该听取自己的调度。