2011-12-29 60 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