【发布时间】:2012-11-15 17:26:53
【问题描述】:
我尝试将一个 MovieClip 动态添加到现有的 SWF - 注入一个执行以下操作的小代码:
this.obj = new MovieClip(); // it is inside an object
obj.name = 'FLOOR';
obj.graphics.beginFill(0xFFFFFF, 0);
obj.graphics.drawRect(0,0,self.width, self.height);
obj.graphics.endFill();
obj.buttonMode = true;
self.addChildAt( floorLayerMC , 0); /* self is an reference for the this keyword, reference for the entire swf */
我的问题是:这个 SWF 有很多元素,如图像和文本字段,其中一些元素没有点击事件处理程序。我需要找到一种方法将所有事件“重定向”到我的“FLOOR”元素,使用类似冒泡事件的方法。
当然,我可以在任何元素的顶部添加 FLOOR,但我有一些带有点击处理程序的元素。我不能忽略所有的元素。所以我的问题是:
如果我使用单击处理程序单击一个影片剪辑,则执行原始操作。 如果我在没有单击处理程序的情况下单击 MovieClip,请执行 FLOOR 操作。
我无法在所有元素中添加事件处理程序。
有什么想法吗?
【问题讨论】:
-
您可以访问 SWF 源吗?
-
当然可以,但我无法更改或破坏某些现有行为(例如某些动画)。
-
您可以做的是,将您现有的 SWF 中的点击侦听器更改为使用捕获阶段(或以更高的优先级进行侦听),然后在它们执行完操作后停止传播。然后在您的容器/主应用程序中,侦听通常的冒泡阶段(或以较低的优先级)。然后,如果该事件的侦听器已经存在,它将在处理时被取消,并且您更广泛的侦听器将不会运行
标签: actionscript-3 flash event-handling