舞臺不可用

有時開發人員會編寫一些需要訪問 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 檔案而不是時間軸。