Вы правы в том, что не существует встроенного способа дублирования видеоклипа.
Однако есть обходные пути. На мой взгляд, самый простой способ - дать классы movieclips.
Вам не нужно делать настоящие занятия. Просто напишите любое имя в поле класса при настройке связывания в самом верхнем фрагменте ролика, который необходимо скопировать.
Так что название для вас светодиодный мувиклип, другое название для лампы и т. Д.
Преимущество в том, что теперь у вас есть класс, из которого вы можете инициировать объекты.
Нет, когда вы берете один из видеоклипов, вы можете скопировать его следующим способом:
public function DuplicateDisplayObject(dO:DisplayObject):DisplayObject
{
if(dO == null)
return null;
var dOClass:Class = Object(dO).contructor;
return DisplayObject(new dOClass());
}
Предполагается, что вы действительно можете сначала получить один из видеоклипов. И имейте в виду, что это не копирует состояние мувиклипа.
Еще одно важное замечание: это работает, только если вы связываете мувиклипы с классами. Классы не должны существовать (Flash создаст для вас пустые классы).
Другие решения могут быть:
- Компиляция против классов без
включая их (см.
тег "external-library-path" для
гибкий компилятор), и загрузить их в
время выполнения (от SWF).
- Компиляция против классов как
RSL (Runtime Share Library) SWC
будет загружен во время выполнения.
У Adobe больше информации о том, как это сделать, ее легко найти на их веб-сайте.
Более экзотическим решением было бы скопировать байт-код объекта. Не уверен, что это сработает с чем-то в списке отображения, не правильно.
О решении, использующем getDefinitionByName ():
Если я правильно помню, вам все равно нужно предоставить поддельные классы movieclips, поскольку getQualifiedClassName возвращает только класс MovieClip. Но я могу ошибаться.