AS3错误1120,扩展了一个类

时间:2011-12-29 20:35:20

标签: flash actionscript-3 class

我不知道如何描述这种情况,所以我将详细描述它。

我创建了一个从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
            }
        }
    }

在MovieClip中定义(或应该)使用此作为基类的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,它再次正常工作。

2 个答案:

答案 0 :(得分:0)

好的,我刚刚启动了flash 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的子动画片段。

...我打算进一步调查,稍后再修改此帖子,但请尝试一下,看看它是否有助于解决您的问题。

答案 1 :(得分:-1)

它可能是未定义的,因为它还没有在舞台上......就像这样

// 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
        }
    }
}