2012-10-31 18 views
1

我可能會錯過一些東西。我認爲這將是一個常見問題,但幾天來在網上進行的廣泛搜索沒有找到我需要的答案。我希望製作一個獨立的影片剪輯,無論它放在哪裏都可以起作用。但是,從擴展影片剪輯的類中訪問影片剪輯中定義的實例似乎很困難。Flash Actionscript AS2 - 在類中的時間軸上定義的訪問實例變量

雖然我在Flash ActionScript 2(AS2)我編碼,我不知道是否存在AS3同樣的問題。

在下列情況下,你如何訪問實例「圈」?

在主時間軸上的影片剪輯有一個實例名稱「廣場」。 Square.as中定義的類Square擴展了該影片剪輯。在影片剪輯中,另一個影片剪輯放置在第一幀上,實例名稱爲「circle」。在第一幀var myName:String = "my name"上也聲明瞭varialbe。下面的代碼無法編譯:

class Square extends MovieClip { 
     function Square() { 
      trace("Square.constructor, circle: " + circle); 
      trace(" --- myName: " + myName); 
     } 
} 

編譯器錯誤:There is no property with name 'circle'.(同爲MYNAME)。

在參考不利於增加this.。顯然,編譯器正在尋找類定義中的變量。

使用_level0.square.circle作品,但需要該類知道自己的實例路徑。雖然_level0.square.myName不會產生編譯器錯誤,但它的值爲undefined

引用除構造函數等方法,這些變量會導致相同的編譯器錯誤。

非常感謝您的幫助。

+0

嗨user1789547,也許如果實例駐留在舞臺上,您必須將階段引用傳遞到類中?我知道你的問題是關於AS2,但這可能是一些幫助:http://www.actionscript.org/forums/showthread.php3?t=250599 – Mike

+0

謝謝,邁克。我在我的搜索過程中看到了類似的討論。但是他們試圖引用類之外的某些東西,而我試圖引用內部的東西,父級影片剪輯中的子級影片剪輯,該類正在擴展。從邏輯上講,至少我認爲,擴展類可以訪問父級影片剪輯可以訪問的所有內容。 -Keith – Braeburn

回答

0

我找到了一種方法來解決這個問題,使用eval(this).

class Square extends MovieClip { 
    var base:MovieClip; 

    function Square() { 
     base = eval(this); 
     trace("Square.constructor, circle: " + base.circle); 
     trace(" --- myName: " + base.myName); 
     onPress = procPress; 
    } 

    function procPress() { 
     trace("procPress: " + base.circle); 
     trace("procPress: " + base.myName); 
    } 
} 

沒有編譯器錯誤。在構造函數中,base.myName仍然是undefined(可以理解)。在通過點擊調用的功能procPress中,base.myName具有正確的值。

+0

以上解決方案僅適用於AS2。在AS3中,引用'circle'或者'myName'直接工作正常,除了myName在構造函數時仍然是null並且在稍後被初始化。 – Braeburn