收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1364|回复: 1

[AS1&2] 我来说一点关于监听器的认识

[复制链接]
发表于 2008-3-13 13:58:49 | 显示全部楼层 |阅读模式
回复了一个问监听器问题的帖子
发现自己突然明白了些什么
觉得值得发一个新帖来说一说
可能这个东西以前有人讨论过
但我还是来说说我的一些认识吧

在回复的那个帖子里 楼主遇到的是这样的问题
var myListener = new Object ();
myListener.onKeyDown = function () {
        trace(1);
};
Key.addListener (myListener);
这段代码,当ctrl+enter之后再次ctrl+enter就会按一下键盘trace两个1,再按就会出三个,以此类推
原因是Key的监听器列队没有被清空
也就是Key._listeners这个数组没被清空,它还存有上次添加的监听器对象
trace(Key._listeners.length);
每当ctrl+enter一次 长度就会加1
虽然看似每次都是添加一个同名的监听对象
但它不会覆盖上次的那个
因为这个名称仅仅是对一个对象的引用
  1. var myListener:Object = new Object ();
  2. Key.addListener (myListener);
  3. myListener = new Object ();
  4. Key.addListener (myListener);
  5. trace(Key._listeners.length)//2
复制代码

myListener = new Object ();这句将引用指向了另一个新创建的对象,
而var myListener:Object = new Object ();
这一句创建的对象仅仅是丢了myListener对它的引用,并没被删除
还是可以在Key._listeners中找到它

addListener的时候会检查添加的对象在列队中是否存在,如果存在就不添加
因为
  1. var myListener:Object = new Object ();
  2. Key.addListener (myListener);
  3. Key.addListener (myListener);
  4. trace(Key._listeners.length)//1
复制代码

这就是证据

而为什么再次ctrl+enter的时候Key._listeners不会被清空就需要研究一下再次ctrl+enter的时候播放器都做了什么

所以要避免一段创建并添加监听器的代码被重复执行
如果一定要这样就要在添加之前删除上次添加的那个
如(两帧)
  1. stop ();
  2. Key.removeListener (Key._listeners[0]);
  3. this.createTextField ("a", 1, 100, 200, 50, 20);
  4. var m:Number = 0;
  5. var myListener:Object = new Object ();
  6. myListener.onKeyDown = function () {
  7.         if (m > 10) {
  8.                 gotoAndPlay (2);
  9.         }
  10.         a.text = m++;
  11. };
  12. Key.addListener (myListener);
复制代码

第二帧空

写到这感觉有些语无伦次了,但我感觉说的勉强看得懂
发表于 2008-3-13 14:33:48 | 显示全部楼层
说得好,.给了我一点启示!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-7-16 02:07 , Processed in 0.124687 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表