2010-08-08 75 views
2

简单的问题..我想知道你们什么时候在你们班扩展EventDispatcher。在我看来,只要我们有导入事件包,我们可以dispatchEvent没有问题....我看到有人在他们的课程中扩展EventDispatcher ...不知道为什么...任何人都在意解释?感谢百万...什么时候扩展EventDispatcher

回答

8

我想你可能会混淆的事实,许多对象在AS3扩展EventDispatcher在继承树更高,只需要导入flash.events包,以分派事件。例如许多DisplayObject类扩展了EventDispatcher。这里有几个例子:

Shape » DisplayObject » EventDispatcher » Object 

Sprite » DisplayObjectContainer » InteractiveObject » DisplayObject » EventDispatcher » Object 

通常我会延长此事件的任何时间,我与刚需之外的它的范围,一些内部属性发生变化或者某些功能是将对象进行通信的自定义类工作发生的历史。这里是一个例子:

public class Clock extends EventDispatcher 
{ 
    protected var _tick:uint; 

    protected function run():void 
    { 
     if(_tick + 1 > 60) { 
      _tick = 0; 
     } else { 
      _tick++; 
     } 
     dispatchEvent(new Event(Event.CHANGE)); 
    } 

    public function getTick():uint { return _tick; } 
} 

有时候保持一个对象的内部细节是唯一的“重要”。在上面的例子中,当调用run()方法时,Clock类执行一些内部逻辑,然后调度一个事件指示事件已经改变。任何正在监听该事件的班级都可以致电公众getTick()方法以找出_tick的值。这隐藏了实现并且保护变量不被外部类改变,并且同时提供了可以通过其读取Clock的接口。

+0

不错的解释... + 1 .....:D – FlyingCat 2010-08-08 21:54:52

相关问题