AS3 Ошибка 1120, после расширения класса - PullRequest
2 голосов
/ 30 декабря 2011

Я не знаю, как описать ситуацию вкратце, поэтому я опишу ее подробнее.

Я создал класс, расширенный из 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 с двумя дочерними MovieClips, названными dragArea_mc и close_mc, и установил его базовый класс на верхний. Работало нормально. Нет проблем вообще.

Поскольку разные окна имеют разное поведение, я хотел создать некоторые другие классы на основе WindowObject. (то есть они расширяют WindowObject и имеют дополнительные функции.)

Я изменил базовый класс мувиклипа, созданного на шаге 2, на новый класс. Теперь вот проблема:

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

Когда я нажал на ошибки, они перенаправили меня в класс WindowObject.

Если я не создаю новые классы, а просто пишу дополнительные функции непосредственно в MovieClip и устанавливаю базовый класс равным WindowObject, он снова работает нормально.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2011

Хорошо, я только что запустил 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
    }
}

А затем в пользовательском интерфейсе создал новый MovieClip и установил для его базового класса TestChild и создал дочерний мувиклип с именем экземпляра drag_me.

... Я собираюсь исследовать больше и отредактировать этот пост позже, но попробуйте это и посмотрите, поможет ли это решить вашу проблему.

0 голосов
/ 30 декабря 2011

это может быть неопределенным, потому что это еще не на сцене .. попробуйте вот так

// 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...