代码之家  ›  专栏  ›  技术社区  ›  peko

我可以进入Flash播放器的活动池吗?

  •  1
  • peko  · 技术社区  · 15 年前

    我想跟踪每个对象上的每个事件,有什么方法可以做到吗?

    2 回复  |  直到 9 年前
        1
  •  1
  •   cwallenpoole    15 年前

    是和不是。

    一种方法是简单地重写其DispatchEvent函数:

    override public function dispatchEvent(event:Event):Boolean
    {
        // Do something with event.
        return super.dispatchEvent( event );
    }
    

    然而,问题在于,这并不总是有效的——有时,如果子对象执行某些操作,则不调用DispatchEvent。如果您不愿意为每个实例创建一个特殊的类,它也将不起作用。

    另一种选择是迭代不同事件类型的数组:

    var evtTypes:Array = [ MouseEvent.CLICK, MouseEvent.ROLL_OVER, 
                           MouseEvent.MOUSE_DOWN...
                           Event.ADDED, Event.ADDED_TO_STAGE... etc.];
    
    for( var i:int = 0; i < evtTypes.length; i++ )
    {
        target.addEventListener( evtTypes[ i ], trace );
    }
    

    此方法的问题在于,您将无法捕获自定义事件,而只能捕获列表中的事件。对于大多数学习和调试问题,我绝对推荐第二种方法。

    不过,我想一个更重要的问题是,“你想如何处理这些事件?”大多数文档列出了对象将要发送的所有事件:如果在 MovieClip 文档,您将看到一个示例。

        2
  •  0
  •   Joel Hooks    15 年前

    您必须创建自己的注册表并以这种方式访问它。所以是的,有一种方法可以做到,但不,不容易。