2010-11-14 5 views
0

Я делаю проект AS3 в FB4. В нашем рабочем процессе у нас есть художники, компилирующие искусство в SWC-файлы, которые я затем связываю как «Связанные библиотеки» в FB4.Как эффективно загружать библиотеки SWF?

Затем я установил «Тип ссылки» файлов SWC на ​​«внешний» вместо объединения в код. Это должно создать SWF, соответствующие SWC-файлам в выходной папке, правильно?

Это, похоже, не так. Я вижу только один SWF-файл: main_app.

Я пытался сделать так, чтобы я мог использовать a library manager для загрузки файлов динамически.

Я попытался извлечь swfs вручную, но, похоже, main_app по-прежнему компилирует все swcs для себя. Я убедился, что тип ссылки установлен на внешний. Размер файла для main_app между «внешним» и «объединенным кодом» выглядит одинаково.

ответ

1

Я сделал простой проект в Flash Builder 4, и единственный способ, которым я получил SWC-> SWF, - создать проект Flex вместо проекта ActionScript и выбрать «Runtime shared library (RSL)» вместо «Внешний». Это связано с тем, что в структуре Flex есть несколько классов, которые работают с загрузкой этих библиотек для вас. Он также автоматизирует преобразование (я должен сказать извлечение) процесс.

Теперь, если вы не хотите создавать проект Flex только для этого, вы можете извлечь SWF самостоятельно. Формат SWC-файла - это просто Zip, содержащий SWF и XML-файл, описывающий содержимое. Затем вы можете динамически загрузить этот извлеченный SWF-файл с помощью Loader и установить правильный Application Domain. Вот фрагмент моего образца проекта.

public class Web extends Sprite 
{ 
    public function Web() 
    { 
     //you will not be able to instantiate classes of your library until it's loaded 
     var loader:Loader = new Loader(); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); 
     loader.load(new URLRequest("library.swf"), new LoaderContext(false, ApplicationDomain.currentDomain)); 
    } 

    protected function onLoadComplete(event:Event):void 
    { 
     //here you can create instances of classes defined in your library 
     new Asset(); 
    } 

} 

Возможно, вы считаете, что это довольно утомительная работа по распаковке + копий при каждом обновлении дизайнеров библиотеки. Вы можете автоматизировать этот процесс с помощью скрипта или файла Ant. К сожалению, если мне не хватает чего-то, похоже, что Flash Builder не хочет, чтобы вы расширили свой процесс сборки, так что вам все равно потребуется немного ручной работы или полностью конвертировать в Ant (или что-то подобное) для сборки.

Удачи вам!

+0

В качестве альтернативы можно загрузить swc-файл в bytearray, извлечь swf из него с помощью некоторой zip-библиотеки и загрузить его в указанную ApplicationDomain - все в ActionScript. – alxx

+0

@alxx Хорошая идея. Я попробую это. – subb

0

С момента добавления SWC в вашу библиотеку вы должны иметь доступ к активам SWC, напрямую называя их имена определенных классов. Нет необходимости пытаться получить SWF и загрузить его с помощью класса Loader. Это на самом деле побеждает цель использования SWC в первую очередь!

Допустим, что в вашем МЖК, у вас есть мувиклип с именем класса GraphicAsset, чтобы создать новый экземпляр, просто сделать это:

var mc:MovieClip = new GraphicAsset(); 

В структуре папок FB4, в взглянуть на ваш SWC в папке «Связанные библиотеки» & проверьте пакет по умолчанию, вы должны увидеть список всех ваших активов.

+1

Я думаю, вы неправильно поняли оп. Он хочет динамически загружать активы и не компилировать их с помощью своего приложения. – subb

 Смежные вопросы

  • Нет связанных вопросов^_^