我找不到比這是由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