2013-03-15 71 views
0

如果我手動添加到主時間軸中的名爲「btnExit」的實例,我可以通過鍵入它的名稱,例如。ActionScript 3訪問從類(不是文檔類)手動添加MovieClip實例

package{ 
    public class Engine extends MovieClip{ 

     public function Engine(){ 
      trace(btnExit.x); 
     } 
    } 
} 

但現在我有一個嵌套在另一個動畫片段中的實例,我想從一個類(不是文檔類)訪問它。

假設我的圖書館有「Menu」動畫片段。

然後,我手動拖動一個「ButtonExit」按鈕到「菜單」movieclip時間軸,我將實例命名爲「btnExit」,因此「btnExit」是「Menu」movieclip的子節點。

「菜單」movieclip將通過代碼動態添加到主時間軸。

現在我想從「Menu」類文件中訪問「btnExit」,所以我編寫了這些代碼。

文檔類:

package{ 
    public class Engine extends MovieClip{ 

     public var menu:Menu; 

     public function Engine(){ 
      menu = new Menu(); 
      addChild(menu); 
     } 
    } 
} 

另一類:

package{ 
    public class Menu extends MovieClip{ 

     public function Menu(){ 
      trace(btnExit.x); 
     } 
    } 
} 

但我得到錯誤#1009(空對象引用)爲無法訪問btnExit;

有人可以幫我嗎,pleaseee?

+1

檢查您的發佈設置(文件 - >發佈設置 - > flash - > ActionScript 3.0設置)。你是否選擇了「自動聲明階段實例」? – Marcela 2013-03-15 19:20:40

+0

收到第一條評論,謝謝! :)是的,我已經選擇了......並且還選擇了動作腳本的導出... – Yurin 2013-03-15 19:29:04

+0

看看[這篇文章](http://www.developria.com/2010/04/combining-the-timeline-with -oo.html)我寫了這個話題。 – 2013-03-16 02:18:41

回答

1

確保ButtonExit的實例存在於菜單時間軸的每一幀上,並且它的實例在每一幀上都被恰當地命名,或者編寫一個if語句來只運行你的代碼,如果Button當前在正確的幀上。如果你的第二/第三/第四/ etc框架沒有一個名爲btnExit的剪輯,那麼當構造函數是這樣的時候它會拋出一個錯誤呼籲那個框架。

+0

如果您不需要或不希望將其放在每一幀上,您可以使用getter/setter對來檢測Flash播放器是否創建並銷燬它,或者偵聽ADDED_TO_STAGE(請參閱上面張貼的文章鏈接)。 – 2013-03-16 02:19:43

+0

@Snukus非常感謝!它通過你的答案**「在每個框架上正確命名的實例」來解決。由於我在「菜單」Movieclip上有2個關鍵幀,因此我只在第二個關鍵幀上命名爲「btnExit」,但在第一個關鍵幀上它的名稱爲空(我沒有注意到它)。 – Yurin 2013-03-16 16:09:06