AS3 - 向孩子添加不同的事件监听器或向父母添加一个事件监听器?

时间:2013-05-17 18:28:37

标签: performance actionscript-3 mobile air addeventlistener

我有一个带有4个按钮的MC(按钮栏)。为每个按钮添加单独的事件侦听器或向父节点添加单个事件侦听器并使用e.target.name来检测单击哪个侦听器是否更有效?谢谢!

2 个答案:

答案 0 :(得分: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或Sprite   对象,运行时执行本机代码来检测和处理鼠标   互动。检测鼠标交互时可能是CPU密集型的   屏幕上会显示许多交互式对象,尤其是它们   重叠。

     

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

根据动画的实际经验,我可以调用几千个回调而不是每帧有限数量的处理程序。

根据您的示例,组件体系结构允许事件冒泡到父控件;因此,按钮栏捕捉事件是一个更好的设计模式。

根据按钮与按钮栏的紧密耦合程度,switch名称/实例块是有意义的,除非您从按钮栏控件中调出抽象按钮控件的自定义事件。

答案 1 :(得分:0)

这是你可以使用的。

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

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