Загрузка символов из AS2 SWF в приложение AS3?

Я конвертирую большое приложение из AS2 в AS3. Часть функции состоит в том, что он загружает ресурсы, встроенные в SWF-файлы, а это старые вещи. Их невозможно преобразовать в AS3 (на самом деле в них нет кода, просто они созданы инструментами, которые выводят SWF-файлы, совместимые с flash 6).

Вопрос в том, как я могу использовать это графическое содержимое AVM1 (ActionScript VirtalMachine 1) внутри приложения AVM2?

Вот что я делал в AS2:

mcLoader = new MovieClipLoader();
mcLoader.addListener(this);
holder = createEmptyMovieClip('holder', 10);
mcLoader.loadClip("http://.../library.swf", holder);
function onLoadInit() {
  holder.attachMovie('GFXsymbolInsideLibraryswf', 'mysymbol', 123);
}

Как я могу сделать то же самое в AS3, загрузив swf библиотеки AS2? Мне понадобится еще один уровень «оболочки» SWF, который обменивается данными через LocalConnection? Скажите, пожалуйста, есть способ попроще. Могу ли я переключить биты в Library.swf, чтобы заставить его загружаться как AVM2 SWF? Поскольку внутри него нет кода, может быть, это сработает?


person davr    schedule 26.08.2009    source источник


Ответы (3)


Вероятно, вам лучше всего загрузить устаревший SWF-файл в AVM1Movie в AS3.

person Luke    schedule 26.08.2009
comment
Спасибо, есть какие-нибудь советы по загрузке символов внутри объекта AVM1Movie? - person davr; 26.08.2009

«Перевернуть» укусы довольно просто. Не знаю, сработает ли это, но вы можете попробовать. Поскольку у вас нет кода, у вас действительно может быть шанс ...

В любом случае, откройте свой SWF-файл с помощью шестнадцатеричного редактора. Номер версии - четвертый байт. Вы увидите что-то подобное для swf, экспортированного для FP 6:

43 57 53 06
Это подпись плюс номер версии. Первые 3 байта - это строка ascii «CWS», что означает, что swf сжат.

46 57 53 06 Это подпись несжатого swf, «FWS».

Попробуйте изменить 06 на 09 и посмотрите, работает ли ...

person Juan Pablo Califano    schedule 27.08.2009
comment
Это в основном то, что делает «ForcibleLoader», как упомянуто ниже. Однако это не обходит стороной тот факт, что, по-видимому, в SWF-файлах AVM1 фрагменты роликов экспортируются как «символы», тогда как в SWF-файлах AVM2 они экспортируются как фактические «классы». Таким образом, из SWF-файла AVM2 невозможно получить символы из библиотеки SWF-файла AVM1, если они еще не прикреплены к сцене. - person davr; 28.08.2009

Похоже, он может делать то, что я хочу, я обновлю этот ответ позже, если я это выясню, и никто больше не ответит.

РЕДАКТИРОВАТЬ: Забудь. Это не работает для того, чем я хочу заниматься. В итоге мне пришлось использовать промежуточную оболочку SWF. Я собираюсь предположить, что сделать то, что я хочу, невозможно. Если у кого-то еще есть предложения, оставьте, пожалуйста, ответ, и я его рассмотрю.

person davr    schedule 26.08.2009