MovieClips не сохраняют свой класс, если они помещены в видеоклип, который добавляется динамически. - PullRequest
0 голосов
/ 19 декабря 2010

У меня есть мувиклип-держатель, его базовый класс - foo.

package {
    import flash.display.MovieClip;

    public class Foo extends MovieClip {
        public function Foo() {
            trace("foo");
        }
    }
}

В foo есть ряд других видеоклипов с базовым классом bar.

package {
    import flash.display.MovieClip;

    public class Bar extends MovieClip {
        public function Bar() {
            trace("bar");
        }
    }
}

Iпоместите трассировку в конструктор bar, чтобы я мог сказать, правильно ли она загружается, и когда я перетаскиваю foo на сцену и запускаю клип, все маленькие полоски внутри него корректно срабатывают.Однако, когда я добавляю его на сцену динамически, например, как это в классе Main:

package {
    import flash.display.MovieClip;

    public class Main extends MovieClip {
        public function Main() {
            this.addChild(new Foo());
        }
    }
}

Внезапно все маленькие клипы бара в foo возвращаются к обычным старым мувиклипам и не запускаются.Есть ли способ это исправить?

1 Ответ

0 голосов
/ 19 декабря 2010

getChildAt () возвращает объект DisplayObject. Чтобы получить доступ к любому из методов / свойств Bar, вам необходимо явно привести его как объект Bar.

Использование вашего кода для примера ...

public class Main extends MovieClip {
    public function Main() {
        var foo:Foo = new Foo();
        stage.addChild(foo);
        foo.x = 0;
        foo.y = 0;

        trace(foo.getChildAt(1) as Bar);
    }//Main()
}

Как ни странно, (очень странно), я только что заметил, что Flash не запускает пользовательский конструктор Bar, если не существует кода КУДА-ТО, который объявляет эти объекты в Foo как тип Bar. Просто изменив один из приведенных выше операторов трассировки (чтобы он вызывал возврат getChildAt), все объекты Bar, представленные в Foo, запустили свои собственные конструкторы. Пойди разберись.

...