2011-09-30 106 views
0

我使用相同的名稱創建了MovieClip「導出爲ActionScript」。當我通過拖拽到舞臺上創建對象時沒問題,但是在使用var smth:* = new myClass()時會發生錯誤。有一個錯誤,因爲我在導出的MovieClip中有一些代碼,它涉及舞臺。發生這種情況,以至於在運行代碼的時刻沒有實例化階段?我的意思是,我在第二幀創建對象,所以它似乎有點不可能。當(在MovieClip中)我寫trace(stage);輸出是null。正如我所說,以可視方式創建對象時沒有問題。女士們,先生們,什麼??!無法通過動作創建對象

回答

1

如果我遵循您所說的話,那麼您的MovieClip子類中就沒有對stage的提示嗎?如果MovieClip未連接到舞臺或已連接到舞臺的其他DisplayObjectContainer(在顯示列表鏈的某處),則會發生此情況。以驗證階段是可用的,當它可用來執行代碼

的一種方式,通常是在的FlashDevelop項目中發現了一個小的代碼片段:

public function Main():void { 
    stage ? init() : addEventListener(Event.ADDED_TO_STAGE, init); 
} 

private function init(e:Event = null):void { 
    removeEventListener(Event.ADDED_TO_STAGE, init); 
    // entry point 
} 

因此,如果stage被發現,它立刻觸發init()方法(不帶參數),否則它會等待它被添加到舞臺(或其他已連接的DisplayObjectContainer)時,它將在init(e:Event)作爲回調方法時通過Event參數。

1
import flash.events.Event; 

在該類的構造函數中,爲要添加的舞臺添加一個eventListener。

this.addEventListener(Event.ADDED_TO_STAGE, myFunction); 

然後只需創建一個名稱爲init,事件爲參數的eventListener。

function myFunction(e : Event) : void 
{ 
    this.removeEventListener(Event.ADDED_TO_STAGE, myFunction); 

    // execute code here 
} 

removeEventListener是必需的,不要忘記將其刪除! Flash中的錯誤會觸發該事件添加到舞臺兩次,因此如果您不想執行兩次代碼,則必須將其刪除。

+0

對不起,我編輯的代碼更清晰。 – JNDPNT

+0

哦,謝謝。有用。然而,無論何時我寫'MovieClip(this.root)',都會有一個錯誤,說AS不能將'Stage'轉換爲'MovieClip'。這是爲什麼? – nicks

+0

請在單獨的問題中提問,這樣其他用戶可以使用搜索:-)更快地找到解決方案。 – JNDPNT