简单的问题..我想知道你们什么时候在课堂上扩展EventDispatcher。在我看来,只要我们有导入事件包,我们可以没有问题调度事件....我看到有人在他们的课程中扩展EventDispatcher ...不知道为什么......有人在意解释?万分感谢...
答案 0 :(得分:8)
我认为你可能会混淆AS3中的许多对象在继承树中将EventDispatcher扩展得更高的事实,只需要导入flash.events包以便分派事件。例如,许多DisplayObject类扩展了EventDispatcher。以下是几个例子:
Shape » DisplayObject » EventDispatcher » Object
Sprite » DisplayObjectContainer » InteractiveObject » DisplayObject » EventDispatcher » Object
通常我会在每次使用自定义类时扩展EventDispatcher,该类只需要与其范围之外的对象进行通信,这些对象的某些内部属性已更改或某些函数正在发生。这是一个例子:
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
的值。这隐藏了实现并保护_tick
变量不被外部类更改,同时提供了一个可以读取Clock
的接口。