stage监听键盘事件被另外的swf加载后失效的解决方法。

本文探讨了在ActionScript 3.0中使用Event.ADDED_TO_STAGE事件进行键盘监听时可能遇到的问题,特别是当SWF文件被其他文件加载时,该事件可能会被触发两次,导致元素和监听器重复创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

if (stage) {
stage.addEventListener(KeyboardEvent.KEY_DOWN,mykeydown)
} else {
addEventListener(Event.ADDED_TO_STAGE, aaa);
}
function aaa(event:Event):void {
removeEventListener(Event.ADDED_TO_STAGE, aaa);
stage.addEventListener(KeyboardEvent.KEY_DOWN,mykeydown)


function mykeydown(evt:KeyboardEvent):void
{
......
}
/////////////////////////////

很多时候,可视类初始化的时候,要用到stage属性,则必须使用Event.ADDED_TO_STAGE事件,有的时候,连文档类初始化时,也需要用到Event.ADDED_TO_STAGE,原因是这个swf将被其它的文件加载,如果直接在初始化函数内使用stage属性,单独发布是没问题的,但联调时就会发生问题。


但是,文档类初始化函数内的Event.ADDED_TO_STAGE,当这个swf被其他文件加载时,很有可能被触发两次,如果你将所有真正的初始化代码都写在Event.ADDED_TO_STAGE事件相应函数内,所有的可视化元素,将会被new出来两份,所有的侦听,将会有两份...


这个现象很隐蔽,往往发生了也不报错,从表面上也看不出问题,但一旦发生,轻则降低机器性能,重则会发生很多灵异事件,例如明明把某个元素visible设成false了,但屏幕上还是能看到它,原因就是new出来东西,都将有两份。
Event.ADDED_TO_STAGE被广播两次的原因,可能是文档类的特殊性造成的,它自己初始化的时候被触发一次,被加载并显示的时候再触发一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值