Загрузка внешних png-файлов в SWF-файл AS2, который загружается в SWF-оболочку AS3 - PullRequest
2 голосов
/ 20 мая 2010

У меня есть Wrapper SWF, который загружает серию фильмов AS2. Каждый фильм AS2 загружает серию файлов .png.

AS3_wrapper.swf
 |-> AS2_1.swf
      |-> image_1.png
      |-> image_2.png
 |-> AS2_2.swf
      |-> image_1.png
      |-> image_2.png

Внутри AS2 я прислушиваюсь к загрузке png с помощью onLoadInit и обновляю свой пользовательский интерфейс.

Это отлично работает для первого AS2 swf. Но когда я загружаю второй AS2 swf, onLoadInit не запускается для pngs. Я предполагаю, что изображения находятся в кэше или что-то в этом роде. Я поместил случайную строку в конец запроса, чтобы попытаться избежать кэширования, но это, похоже, не работает.

Код в as2 выглядит примерно так:

var flagLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadInit = Delegate.create(this, handleImageLoad);
flagLoader.addListener(listener);
var row:MovieClip = frame1["row" + (numLoaded + 1)];
flagLoader.loadClip(predictionData[numLoaded].flag + "?r="+Math.random(), row.flag);

Я стараюсь загружать только одно изображение за раз (я читал неподтвержденные свидетельства, что загрузка более чем одной вещи за один раз может запутать MovieClipLoader). Для первого файла as2 все отлично работает. Когда я загружаю второй файл as2, handleImageLoad никогда не вызывается.

Обновление: Еще большее недоумение вызывает то, что если я перезагружаю первый фильм AS2 (после того, как второй фильм AS2 не загружает изображения), первый фильм AS2 снова загружает изображения нормально.

Обновление 2: После попытки перейти от использования MovieClipLoader к опросу (как было подсказано), я нашел еще одно свидетельство, которое имеет отношение к делу.

Когда я загружаю первые файлы AS2 и отслеживаю из клипа верхнего уровня, он печатает _root. Второй файл AS2 при загрузке отслеживает тот же _root. Это привело меня к проверке, сталкивались ли они с именами, и они есть. У обоих есть ребенок по имени frame. Первый, когда я прослеживаю, получается как _root.frame, как и ожидалось. Второй файл AS2 отслеживает _level0.instance3.instance118.instance111.frame. Я предполагаю, что это связано с проблемой.

Flash сохраняет _root двух файлов одинаковыми, но меняет расположение своих дочерних файлов (для впоследствии загруженных файлов, у которых есть дочерние элементы с одинаковыми именами). Так что либо onLoad идет не в тот клип, либо события о его загрузке.

Ответы [ 3 ]

1 голос
/ 04 июля 2010

Раз в 3-4 года я сталкиваюсь с проблемой, которая, как мне кажется, окончательно меня сломает ...

Я сталкивался с этим постом, пытаясь понять, почему, хотя я успешно загружал свой фильм AVM1в файл фильма AVM2 файл AVM1 работал не так, как ожидалось.

Решив первоначальную огромную проблему невозможности обмена данными между файлами AS2 - AS3, я не мог поверить, когда фильм AVM1 всегда казалсячтобы остановить сразу после запуска воспроизведения.

Для меня методы MovieClipLoader loadClip () не запускали какой-либо прогресс или завершенные события, в результате чего мой файл полностью прекращал воспроизведение, как вы оба предложили.1008 * Ваше предложение запустить интервал после вызова loadClip для сравнения загруженных байтов с общим количеством байтов сработало для меня.

Спасибо Спасибо Спасибо Спасибо Спасибо!: D

0 голосов
/ 12 июня 2010

Джеймс,

Вы правы, я также заметил, что считывание _root vs _level0.instance3.instance118 в стеке трассировки, который вы описали, должно быть связано с контентом AVM1 и с тем, как его обрабатывают фильмы AVM2.

Опрос не будет всегда работать, но вы можете использовать его, чтобы увидеть, что происходит после запуска метода loadClip () . Вы видите bytesLoaded как undefined ? Или, может быть, SWF загружен, но вы не можете получить доступ к его свойствам, таким как переменная, объявленная на главной временной шкале вашего SWF. Я достаточно глубоко вник в эту проблему и обнаружил, что по сути у вас есть два или три способа обойти эти проблемы. Опрос контейнера AS2 - это первый шаг, чтобы увидеть, что не работает ....

Можете ли вы получить ваши файлы .png для загрузки, используя loadMovie вместо MovieClipLoader ?

Вы пробовали запустить свой пример под FP10.1? Как ни странно, многие из этих проблем уходят!

В зависимости от сложности вашего приложения AS2 это может быть сложной проблемой для обхода.

Вы проверили это: http://fladdict.net/blog-en/2007/06/avm2loader-class.html

спасибо, Geoff

0 голосов
/ 26 мая 2010

Запуск AS2 под AS3, по-видимому, вызывает некоторые проблемы с задержкой .... вам нужно несколько раз опросить загруженный SWF-файл, прежде чем он узнает, что он загружен.

Я нахожусь в подобной ситуации ... оболочка AS3 загружает большое и сложное приложение AS2 со многими внешними SWF-файлами, зависимостями и т. Д. Мне нужно было выполнить интервал после вызова loadClip длясравнивать загруженные байты с общим количеством байтов ... затем, когда они равняются друг другу (но превысили 4), я могу безопасно запустить функцию onLoadInit, которая в противном случае никогда не сработала бы.

Таким образом, вы теряете все события init, progress и error, которые MovieClipLoader дал вам в AS2 ... вы возвращаетесь к дням FP5 и FP6, но, похоже, они работают надежно.Хотелось бы услышать об опыте других людей, и если есть лучший способ обойти это.

...