舞臺不可用
有時開發人員會編寫一些需要訪問 stage
或 Flash 階段的程式碼來新增監聽器。它可以第一次工作,然後突然無法工作併產生錯誤 1009.有問題的程式碼甚至可以在時間軸上,因為它是第一個在那裡新增程式碼的主動,並且許多教程仍然存在使用時間軸程式碼層放置程式碼。
public class Main extends MovieClip {
public function Main() {
stage.addEventListener(Event.ENTER_FRAME,update); // here
這段程式碼不起作用的原因很簡單:首先例項化一個顯示物件,然後將其新增到顯示列表中,當它不在顯示列表中時,stage
為空。
如果程式碼像這樣更糟糕:
stage.addEventListener(Event.ENTER_FRAME,update); // here
被放置在時間軸上。它甚至可以工作一段時間,而 Main
物件通過 GUI 打到舞臺上。然後,他們的 SWF 從另一個 SWF 載入,突然程式碼中斷。發生這種情況是因為當玩家直接載入 SWF 並且非同步處理載入時,Main
的幀以不同的方式構造。解決方案是使用 Event.ADDED_TO_STAGE
監聽器,並將所有解決階段的程式碼放入其中,並將監聽器本身放入 AS 檔案而不是時間軸。