Events 事件

在Display引擎里面,所有 DisplayObject 派生的对象都是一个潜在的 EventDispatcher。(注意我们 为了节约代码不真的有EventDispatcher抽象层。)

对于这些事件,Kagerou Engine有三种不同的对应策略,它们对于程序效率的影响都各不相同,所以此文档 将作为参考给开发者们选择不同的Event。简单说,Kagerou Engine有三种不同的事件播放体系。

常开放 (Always On)

常开放的事件大多数是AS3中的广播事件和渲染事件。由于沙箱无法通过API咨询外部的渲染状况,渲染事件是 定时进行广播的。这些事件在一个DisplayObject被注册时就会开始进行广播,无论是否有监听器。这些事件 几乎全部都是由沙箱内部的定时器程序诱发的,所以多数一般都属于沙箱内事件(In-Sandbox Events)。 因为是沙箱内的广播,所以没有了传输协议可能带来的速度影响,但是因为是由总线派发的,所以这些事件卡住 有可能导致总线卡住。一般来说监听器都是轻松愉快的渲染。

常有效 (Always Available)

常有效的事件大多数是由罕发的UI事件组成的,比如点击事件,播放启动暂停事件,加载完毕事件,窗口大小 变化事件,用户诱发的弹幕发送事件等。这些事件总会由外部传送回沙箱内部,因为其罕发性,所以通过量很低。 这些事件是效率最高的一种。

限制事件 (Limited Availability)

限制事件大多数是由无法很便利的传输的事件组成的。比如鼠标位置事件,根对象的添加事件, 弹幕播放器自发的更新事件。这些事件只有在绑定后才会传输,而且往往都是滞后传输来避免发送过多的Worker 通讯而堵塞管道(Unclog the pipes!)。

用户事件(User Events)

用户事件是由用户操作诱发的事件。大多说情况下这些事件都相对比较罕见而稀疏(因为用户的操作并不频繁), 大多数用户相关的事件都采取常有效的模式。

用户事件包括:键盘事件(KeyUp, KeyDown, KeyPress),点击事件(Click, DblClick),播放器 事件(PlayerStateChange)。

沙箱内事件(In Sandbox Events)

沙箱内事件是一些不需要沙箱外对象参与就可以实现的事件。其中有两种主要的事件:广播事件(Broadcast Events)和内部事件(Internal Events)。

广播事件诸如:enterFrame,render等。 内部事件诸如:added(不包括root的),removed等

状态事件(State Events)

状态事件是一些反映各种状态的事件。这些事件往往是降低频率接收的。

比如:mouseX, mouseY (在不邦定mouse相关操作时无法读取)。