Вот сценарий:
У нас есть творческая команда, которая работает во Flash CS5.5 и создает ресурсы SWF, в которых есть как графические элементы, так и код ActionScript, а также инженерная группа, которая создает файлы .as истроит "кодовые SWF".SWF-файлы кода должны загружать или встраивать творческие ресурсы и взаимодействовать с кодом в нем, чтобы наши приложения работали.
Для разработки на мобильных устройствах под iOS есть другое соображение - невозможно загрузить исполняемый код в AIRпакеты приложений для iOS из-за Apple TOS (см. связанный вопрос ).Следовательно, невозможно использовать Loader для загрузки SWF-файлов в среде iOS и сохранения их кода.
Встраивание SWF-файла в файл ActionScript стандартным способом приводит к загрузчику, который загружает встроенный SWF-файл непосредственно в байтах.,Это приводит к доступу к основной временной шкале верхнего уровня следующим образом:
[Embed(source="embed_test.swf")]
private var no_aot_support:Class;
public function main():void
{
var no_ios:* = new no_aot_support();
addChild(no_ios);
no_ios.addEventListener(Event.COMPLETE, function():void {
var timeline:MovieClip = no_ios.getChildAt(0).getChildAt(0);
trace(timeline.foo); // foo variable exists, output is 'blah'
});
}
Однако этот механизм встраивания не работает на устройствах iOS, поскольку код выполнения не разрешен в соответствии с TOS Apple - весь код долженбыть пропущенным через опережающий компилятор (AOTCompiler) во время компиляции, и встроенный таким образом SWF-файл не соответствует этому критерию.
Обращаясь, я обнаружил , что одинможет использовать встраивание на уровне класса, чтобы обойти это, так как встраивание на уровне класса проходит через компилятор и приведет к рабочему коду под iOS:
package
{
import flash.display.MovieClip;
[Embed(source="embed_test.swf", symbol="Symbol1")]
public final dynamic class anim extends MovieClip { };
}
Это работает нормально, но я неЯ хочу сослаться на символ в SWF, я хочу весь SWF (он же ссылка на основную временную шкалу), но следующие результаты приводят к ошибке компилятора:
package
{
import flash.display.MovieClip;
[Embed(source="embed_test.swf")]
public final dynamic class anim extends MovieClip { };
}
Я также декомпилировал SWF, нашелосновной символ временной шкалы, и попробовал это:
package
{
import flash.display.MovieClip;
[Embed(source="embed_test.swf", symbol="embed_test_fla.MainTimeline")]
public final dynamic class anim extends MovieClip { };
}
Но компилятор настаивает на том, что этот символ не существует.
Поскольку у меня много, много ресурсов SWF, мне нужно решение, которое неэто связано сзлиться на весь мой рабочий процесс (т.е. входить в каждый FLA и вносить изменения).Это должно быть возможно, а если нет, то это проблема рабочего процесса, которую должен решить Adobe.
Так что я застрял - обычные встраивания получают MainTimeline, но не работают в iOS, встраивания на уровне класса работают в iOSи не может получить доступ к MainTimeline.
Не стесняйтесь скачайте мой пример проекта и поиграйте с ним.