今天遇到了Event.ADDED_TO_STAGE这个事件,因为第一次遇到所以找了好多的资料,想了解在什么情况下使用这个事件。原来是当我们要引用 stage 的时候需要添加这样的侦听器。
看代码:
private function _onAddedToStage(param1:Event)
{
removeEventListener(Event.ADDED_TO_STAGE, _onAddedToStage);
if (m_mcStage == null)
{
m_mcStage = stage;
m_mcStage.stageFocusRect = false;
m_mcStage.focus = this;
m_mcStage.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown);
m_mcStage.addEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
}// end if
addEventListener(Event.ENTER_FRAME, _onEnterFrame);
return;
}
private function _init()
{
addEventListener(Event.ADDED_TO_STAGE, _onAddedToStage);/
} }
很多时候,可视类初始化的时候,要用到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被广播两次的原因,可能是文档类的特殊性造成的,它自己初始化的时候被触发一次,被加载并显示的时候再触发一次。
看代码:
private function _onAddedToStage(param1:Event)
{
removeEventListener(Event.ADDED_TO_STAGE, _onAddedToStage);
if (m_mcStage == null)
{
m_mcStage = stage;
m_mcStage.stageFocusRect = false;
m_mcStage.focus = this;
m_mcStage.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown);
m_mcStage.addEventListener(KeyboardEvent.KEY_UP, _onKeyUp);
}// end if
addEventListener(Event.ENTER_FRAME, _onEnterFrame);
return;
}
private function _init()
{
addEventListener(Event.ADDED_TO_STAGE, _onAddedToStage);/
} }
很多时候,可视类初始化的时候,要用到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被广播两次的原因,可能是文档类的特殊性造成的,它自己初始化的时候被触发一次,被加载并显示的时候再触发一次。