Как эффективно загружать библиотеки SWF? - PullRequest
0 голосов
/ 14 ноября 2010

Я делаю проект AS3 в FB4.В нашем рабочем процессе художники компилируют произведения искусства в файлы SWC, которые я затем связываю как «Библиотеки со ссылками» в FB4.

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

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

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

Iпопытался извлечь swfs вручную, но кажется, что main_app все еще компилирует все swcs в себя.Я убедился, что тип ссылки был установлен на внешний.Размер файла для main_app между «external» и «merged to code» одинаков.

Ответы [ 2 ]

1 голос
/ 14 ноября 2010

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

Теперь, если вы не хотите создавать проект Flex только для этого, вы можете извлечь SWF-файл самостоятельно.Формат файла SWC - это просто Zip, содержащий SWF и файл XML, описывающий содержимое.Затем вы можете динамически загрузить этот извлеченный SWF-файл, используя загрузчик и установив правильный 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 голосов
/ 14 ноября 2010

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

Предположим, что в вашем SWC у вас есть MovieClip с именем класса GraphicAsset, для создания нового экземпляра вы просто делаете это:

  var mc:MovieClip = new GraphicAsset();

В структуре папок FB4 посмотрите на SWC в папке Referenced Libraries и проверьте пакет по умолчанию, вы увидите список всех ваших активов.

...