2011-12-29 80 views
2

我不怎麼描述情況,所以我將詳細描述它。AS3錯誤1120,擴展一個類後

我創建了一個從MovieClip擴展的類。它看起來像這樣:

// Libraries are imported 

    public class WindowObject extends MovieClip { 
     public function WindowObject():void { 
      dragArea_mc.addEventListener(...); 
     } 

     public function AFunction():void { 
      if(close_mc == null) { 
       // Do something 
      } 
     } 
    } 

其中dragArea_mc是(或應該)在使用這個基類的影片剪輯定義。

我已經創建了一個MovieClip,帶有兩個名爲dragArea_mc和close_mc的子級MovieClip,並將其基類設置爲頂層。它運行良好。沒有問題。

由於不同的窗口有不同的行爲,我想創建一些基於WindowObject的其他類。 (即它們擴展WindowObject,並且具有附加功能)。

我將在第2步中創建的MovieClip的基類更改爲新類。現在,這裏的問題是:

1120: Access of undefined property dragArea_mc. 
    1120: Access of undefined property close_mc. 

當我點擊了錯誤,他們重定向我到WindowObject類。

如果我不創建新類,但直接在MovieClip上寫入附加函數,並將基類設置爲WindowObject,則它將再次正常工作。

+0

嘗試將您的課程定義爲'public dynamic class' – 2011-12-29 20:43:48

+0

感謝您的快速響應。我試圖將'public class WindowObject'更改爲'public dynamic class WindowObject',但它仍然有相同的錯誤。 – 2011-12-29 20:53:13

+0

此外,我還在新課程中添加了「動態」,它無法解決問題。 – 2011-12-29 21:00:02

回答

0

好吧,我剛剛解僱了閃光燈CS5,並再現您的問題。我不得不承認我有點困惑......而且我將不得不進行更多的調查,因爲我不確定我是否真的明白髮生了什麼。

嘗試這兩個類設置爲public dynamic class...

,然後,而不是直接引用dragArea_mc,引用它通過this.dragArea_mc

我結束了有:

public dynamic class TestParent extends MovieClip { 
    public function TestParent() { 
     // trace(drag_mc); doesn't work 
     trace(this.drag_mc); // works as long as the class is dynamic 
    } 
} 

public dynamic class TestChild extends TestParent { 
    public function TestChild() { 
     // trace(drag_mc); surprisingly does work, but odd it doesn't work in the parent. 
     trace(this.drag_mc); // works as long as the class (and its parent) are dynamic 
    } 
} 

然後在UI,創建新的MovieClip並將其基類設置爲TestChild,並創建一個實例名稱爲drag_me的子級動畫片段。

...我要調查更多,稍後再編輯這篇文章,但試試看看它是否有助於解決您的問題。

+0

感謝您的幫助!所以,我需要的是添加「動態」,也是「這個」。現在它工作正常。乾杯! – 2011-12-29 21:18:24

+0

有趣的是,我被告知不要使用「這個」。如果可能的話,因爲它會影響性能。但是,這一次,「這」。是必要的。 ORZ – 2011-12-29 21:25:24

-1

可能是不確定的,因爲它不是在舞臺上相當yet..try像這樣

// Libraries are imported 

class WindowObject extends MovieClip { 
    public function WindowObject():void { 
     addEventListener(Event.ADDED_TO_STAGE, init); 
    } 

    private function init(e:Event):void 
    { 
     removeEventListener(Event.ADDED_TO_STAGE, init); 
     dragArea_mc.addEventListener(...); 
    } 

    public function AFunction():void { 
     if(close_mc == null) { 
      // Do something 
     } 
    } 
} 
+0

想快速回應。但我認爲這不是問題,因爲它也表示close_mc未定義。 – 2011-12-29 20:46:11

+0

@Ronnie一個'DisplayObject'實例不必在舞臺上存在... – Marty 2011-12-30 00:49:00