У меня есть мувиклип-держатель, его базовый класс - 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 возвращаются к обычным старым мувиклипам и не запускаются.Что интересно, если в какой-то момент вы ввели их как Bar, а их нормальный класс установлен на Bar (внутри самого мувиклипа, а не в базовом классе), он работает, и все конструкторы срабатывают, как здесь:
public function Main() {
var foo:Foo = new Foo();
stage.addChild(foo);
foo.x = 0;
foo.y = 0;
trace(foo.getChildAt(1) as Bar);
}//Main()
Однако, если вам нужно несколько различных типов клипов Бар и назначить каждому базовый класс Бар, это не сработает.Все они появляются как общие видеоклипы.Это работает, если вы проходите через них и вводите их как Bar1
или Bar2
, но на практике это означает, что на практике вам придется пытаться настраивать каждый дочерний тип каждого объекта верхнего уровня каждый раз, когда вы добавляете клип на сцену..
Вы также не можете иметь несколько видеороликов одного и того же типа, поскольку Flash не позволяет этого, поэтому каждый из них должен быть новым классом и иметь этот тип, приведенный к типу, когда родительский объект помещен вэтап.Вид поражения цели ООП.
Кажется, это ошибка в самой Flash, но есть ли способ исправить это?