2016-10-13 00:16:48 点击量:19 标签: 收藏本文
一:使用方法:
1172: 找不到定义 flash.events.Event:ADDED_TO_STAGE。
今天在文档类中初始化一个自定义类是,遇上了上面的错误,仔细考虑才发现可能在自定义类中定位一个区位交通图,获取stage.stageWidth和stage.stageHeight的时候引发了该错误,我分析可能和舞台加载顺序有关,因为只有自定义类被添加到舞台上,才能获得相关的stage的信息。找到了原因,就有解决的办法,就是用DisplayObject类的Event.ADDED_TO_STAGE。具体如下:
- import flash.events.Event;
- package cn.kwoky.library{
- public class Emap extends Sprite {
- public function Emap ():void
- {
- this.addEventListener (Event.ADDED_TO_STAGE,init);
- //极酷播放器提示:侦听类是否被添加到了舞台
- }
- }
- private function init (e:Event=null):void
- {
- removeEventListener (Event.ADDED_TO_STAGE,init);
- trace(stage.stageWidth,stage.stageHeight);
- }
在这里,关键是通过ADDED_TO_STAGE事件,来侦听该类是否被添加到了舞台显示列表,如果已经被添加,就会触发該事件,然后就可以使用stage相关的信息了。
二:关于ADDED_TO_STAGE执行再次的解决
- addEventListener(Event.ADDED_TO_STAGE, StageReady);
- public function StageReady(e:Event):void{
- trace("stage ready");
- init();
- stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDownListener);
- button.addEventListener(MouseEvent.CLICK, clickHandler);
- }
我们通常会在构造函数中添加这个监听器, 然后再执行初始化函数。因为如果舞台还未初始化完成,就无法使用stage属性,比如添加键盘监听就无法添加。
但是当我们使用这个监听器的时候一定要小心。因为他有十分隐蔽的问题。stageReady函数中的代码可能被两次,三次执行。等多次数还未遇到。原因这篇文章再不做阐述。
如上面的代码,键盘监听被加载了多次,按钮的监听也被加载了多次。如果新建的实例,也会被多次创建。之所以说这个bug隐蔽是因为,这种问题不会报错。
通常AS3的监听器是需要我们手动去掉的,如果不去掉将会导致效率降低,所以我们会写:
- public function ClearUp():void{
- stage.removeEventListener(KeyboardEvent.KEY_DOWN,KeyDownListener);
- button.removeEventListener(MouseEvent.CLICK, clickHandler);
- }
如果stageReady中的监听器被加载了两次,那么在ClearUp函数中,你写两遍removeEventListener也不会报错。因为的确有两监听器。
但是对于可视化的原件等等多的被多次创建的元素呢?会产生更多的问题
所以要做的是不要让stageReady运行多次。
所以应该在stageReady中的第一句话写上:
removeEventListener(Event.ADDED_TO_STAGE, StageReady);
这样就可以防止多次运行了。经过多次试验,目前还没有出现过新的bug
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室