我找不到比这是由Adobe为Event类提供与此相关的其他任何特定的文档,但我相信你正在经历是有关的事件Event.ENTER_FRAME
和Event.EXIT_FRAME
以及如何Flash运行时之间的差异初始化对象以供使用。
我用Event.ENTER_FRAME
的代码进行了测试,并且遇到了与您遇到的相同的结果;但是,当我使用Event.EXIT_FRAME
事件时,显示对象根本不作为空。
然后,我更进了一步,确定了我的时间表和您的完全一致;然而,更改的事件代码在场景1中,1帧为:
import flash.events.Event;
import flash.display.MovieClip;
stage.addEventListener(Event.ENTER_FRAME,update);
stage.addEventListener(Event.EXIT_FRAME,update);
function update(e:Event){
if(e.type == Event.ENTER_FRAME) {
trace("ENTER FRAME: " + currentScene.name);
}
else if(e.type == Event.EXIT_FRAME) {
trace("EXIT FRAME: " + currentScene.name);
}
trace(char);
}
play();
而且在执行时发现一些有趣的事情:
EXIT FRAME: Scene 1
[object MovieClip]
ENTER FRAME: Scene 2
null
EXIT FRAME: Scene 2
[object MovieClip]
ENTER FRAME: Scene 2
[object MovieClip]
EXIT FRAME: Scene 2
[object MovieClip]
...
- 的
Event.ENTER_FRAME
事件从未呼吁场景1。可能是因为该事件已发生在场景1上的代码之前,帧1正在执行。
null
引用实际上是与在场景2上尚未初始化的char
实例有关。一旦播放头退出帧,可能在实例能够被引用时,它将作为MovieClip读取。
这些行为[大概]为什么这么多的人建议使用文档类在必要时添加对象在舞台上,连接监听器的Event.ADDED_TO_STAGE
知道什么时候加入他们,这样就可以处理功能的原因在适当的时间点,他们实际上被添加到舞台上;而不是等待对象能够通过时间线被引用。我最好的猜测是,如果ENTER_FRAME事件在场景1上触发,它可能跟踪null
为char
,就像在场景2上跟踪null
一样。它可能是null
,因为舞台上的显示对象尚未初始化所以对该对象的代码引用还没有初始化。
我希望我有更多的时间去为你调查这件事,但这是我可以用来描述你所遇到的行为的最佳测试和解释。
干杯!
谢谢,这正是我所寻找的 – DrakeTruber 2015-04-06 00:06:45
不客气!我在前几段提炼了一些我的陈述,以澄清场景1帧1上的ENTER_FRAME事件发生了什么。 – 2015-04-06 16:42:09