Как скопировать содержимое одного фрагмента ролика (с несколькими кадрами) в другой фрагмент ролика во flash-сценарии 3? - PullRequest
1 голос
/ 12 сентября 2009

Мне нужен способ динамического копирования содержимого одного фрагмента ролика (с несколькими кадрами) в другой с использованием as3.

Вот как я пытался это сделать:

var table:Table = new Table(); //A custom class that extends MovieClip.
var swf:MovieClip = this.content.swf; //The movie clip I want to copy from.
for (var z:int = 0; z < swf.totalFrames; z++) //for every given frame of swf.
{
   swf.gotoAndStop(z);
   table.gotoAndStop(z);

   for (var i:int = 0; i < swf.numChildren; i++) //for every child of swf.
   {
      table.addChild(swf.getChildAt(i)); //copy child from swf to table.
   }
}

Это не работает должным образом. Копирует только первый кадр. Как я могу скопировать каждый кадр swf на таблицу, чтобы таблица могла воспроизводить и останавливать анимацию так же, как это делает swf?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2009

Так как похоже, что вы загружаете SWF, у вас есть еще одна опция ...

Загрузите SWF-файл в ByteArray, используя URLoader, а не загрузчик. Затем вы можете создавать объекты Loader каждый раз, когда вам нужна новая копия SWF - вы просто используете метод Loader loadBytes, чтобы извлечь SWF из ByteArray.

1 голос
/ 12 сентября 2009

Существует несколько причин, по которым это не сработает, но главная из них заключается в том, что кадры не существуют во время выполнения, как вы пытаетесь получить к ним доступ. Кадры представляют собой концепцию времени автора - когда вы помещаете определенное содержимое в кадр 1, а другое содержимое - в кадр 2, во время выполнения Flash не отслеживает различные наборы дочерних элементов для каждого кадра. То, что скомпилировано в SWF, - это просто инструкции о том, что определенные дочерние элементы должны автоматически добавляться или удаляться при переходе от кадра 1 к 2 или наоборот.

Если вам просто нужна вторая копия данного MC, которая воспроизводит ту же анимацию, что и первая, вам скорее всего нужно будет продублировать сам объект. В AS2 вы могли бы сделать это с API duplicateMovieClip (), но, к сожалению, AS3 не имеет эквивалентной команды. Вместо этого вам нужно создать новый экземпляр клипа, который вы хотите дублировать, с кодом этой формы:

var swf:MovieClip = this.content.swf;
var swfClass:Class = swf.constructor;
var newSwf:MovieClip = new swf.constructor;

Обратите внимание, что это не будет работать, если объект, который вы пытаетесь продублировать (this.content.swf), не был прикреплен к классу (т. Е. Был установлен флажок "экспорт для ActionScript"), когда он был опубликован. Если это не так, то, насколько я знаю, нет способа дублировать его в AS3. Если это так, я думаю, что лучшее, что вы можете сделать, - это обходной путь - например, вместо создания дубликата клипа, вы можете создать растровое изображение, и каждый кадр просто отображает внешний вид исходного клипа в BitmapData, и закрасить эти данные в «дубликат» растрового изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...