| Flash MX 新的闪烁世界(第七天)
从Flash 5的时候,我就一直在抱怨为什么enterframe的速度这么固定还这么慢?为什么对于Key对象我还必须去手动建立一个MovieClip来接收事件并触发它?为什么我不能及时准确地接受到我需要的信息呢?亿万个为什么总是关于速度和效率的话题,终于Flash
MX带来的一个新概念让我得到满足,那就是Listener——及时监听对象。
说起这个对象,其实在很多C语言程序中并不是什么新概念,它主要是作为测试环境中的消息接受器或者是改进程序的效率而存在的,但在Flash
MX是第一次出现,也是恰到好处地出现。
Listener对象需要包含调用目标所需要的事件集合,事件集合内可以定义对事件的处理程序,目标函数如果需要Listener对象,必须支持加入Listener的方法。在Flash
MX中支持Listener的对象有六种:FStyleFormat、Key、Mouse、Selection、Stage和TextField,通过addListener支持Listener。
Key:
在Key对象中的Listener可以获取onKeyDown和onKeyUp时间(当然,也没别的事件可以获取……),一个获取键盘按下和放开的事件监听:
lsn = new Object();
lsn.onKeyDown = function () {trace("down")
};
lsn.onKeyUp = function () {trace("up")
};
Key.addListener(lsn);
定义Listener的过程很简单,毕竟其本身既是一个对象,并且内部只需要响应事件的集合即可,最后通过支持Listener的方法来得到事件入口并开始触发响应。
Mouse:
Mouse可以给Listener获取的是onMouseDown、onMouseMove、onMouseUp事件,一个获取鼠标事件的例子:
createEmptyMovieClip("mc", 1);
lsn2 = new Object();
lsn2.onMouseUp = function () {trace("mouse
up") };
lsn2.onMouseDown = function () {trace("mouse
down") };
lsn2.onMouseMove = function () {trace("mouse
moving...") };
mc.onMouseUp = function () {trace("movie
mouse up") };
mc.onMouseDown = function () {trace("movie
mouse down") };
mc.onMouseMove = function () {trace("movie
mouse moving...") };
Mouse.addListener(lsn2);
这个例子也比较明了,但说明了一些事情。在有相同事件和Listener都存在的时候,也许你会问到优先级的问题,而也直接涉及到了Listener的生存周期问题。
|