2013-05-17 245 views
2

我有一个带4个按钮的MC(按钮栏)。将单独的事件侦听器添加到每个按钮或将单个事件侦听器添加到父项并使用e.target.name检测哪个被点击是更有效?谢谢!AS3 - 为孩子添加不同的事件监听器,或向父代添加一个监听器?

+1

后者,但你必须有很多的听众,使其在性能上真正的区别 – BadFeelingAboutThis

+0

对于点击事件,你可以每千的百余项与它自己的点击监听,并不会物。 – BadFeelingAboutThis

+0

这就是我的想法。谢谢! – yvesbastos

回答

0

活动是昂贵的,并与众多的事件处理程序,你应该consider using callbacks instead of the event model高性能应用。

ActionScript 3.0事件模型基于对象 调度的概念。事件模型是面向对象的,并针对代码 重用进行了优化。 dispatchEvent()方法遍历侦听器列表 ,并在每个注册对象上调用事件处理函数方法。然而, 事件模型的缺点之一是,您可能在应用程序的整个生命周期内创建许多对象。

使用本地事件模型可以是较慢的和消耗更多的存储器 比使用传统的回调函数。在内存中创建和分配的事件对象必须为 ,这会导致性能下降。 例如,在侦听Event.ENTER_FRAME事件时,会在事件处理函数的每个帧上创建一个新的事件对象。 由于 捕捉和冒泡阶段,显示对象的性能可能会特别慢,如果列表显示复杂,这可能会很昂贵。

同样,numerous mouse enabled interactive objects are cpu-intensive

当使用交互式对象,如MovieClip或精灵 对象时,运行时执行本机代码,以检测和处理鼠标 相互作用。在屏幕上显示许多交互式对象时,检测鼠标交互可能会占用大量CPU资源,尤其是在它们重叠的情况下尤其如此。

如果可能,请考虑禁用鼠标交互,这有助于您的应用程序使用较少的CPU处理,从而减少移动设备上的电池使用量。

从动画的实际经验来看,我可以调用数千次回调,而每帧处理器数量有限。

根据您的示例,组件体系结构可以使事件向上吹到父控件;因此,这是按钮栏捕捉事件的更好设计模式。

根据按钮与按钮栏的紧密耦合情况,除非您正在调度从按钮栏控件抽象按钮控件的自定义事件,否则switch名称/实例块才有意义。

0

这是你可以使用。

addChild("YourButtonName").addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); 

private function mouseDownHandler(event:MouseEvent):void { 
    "Your mouse click Action is Here" 
}