Возможно ли получить доступ к удаленному SWF без необходимости его загрузки? - PullRequest
0 голосов
/ 20 мая 2010

У нас есть очень большой SWF, размещенный на веб-сайте, который является просто хранилищем сотен фильмов / символов. Мы загружаем этот SWF в начале с помощью класса Loader, но тогда клиент получит доступ к очень немногим из них в этот момент.

Можно ли сказать загрузчику загружать символы только тогда, когда они нужны? (как с applicationDomain.getDefinition (...)).

Заранее спасибо.

Ответы [ 4 ]

1 голос
/ 20 мая 2010

Не думайте, что вам может понадобиться загрузить весь swf перед использованием getDefinition ().

Обходной путь, о котором я могу подумать, - это разделить swf на множество разных.

Либо назовите swf-файлы по классам, которые они содержат, либо сохраните несколько пар swf-файлов / содержащихся классов в текстовом файле / xml и используйте их для загрузки ресурсов по имени.

Посмотрите на BulkLoader , это может сэкономить вам время.

Если вы используете Flash IDE, я написал простой скрипт jsfl, который должен менее утомительно:

var doc   = fl.getDocumentDOM();
var dir   = 'file:///' + doc.path.substr(0,(doc.path.lastIndexOf('/')+1));
var lib   = doc.library;
var code  = 'var loader : BulkLoader = new BulkLoader("assets");\n';
var items = lib.items;
var iNum  = items.length;
var path;
var name;

fl.outputPanel.clear();

for(var i = 0 ; i < iNum ; i++){
    if(items[i].linkageExportForAS){
        name = items[i].linkageClassName;
        path = dir+name+'.swf';
        items[i].exportSWF(path);
        code += 'loader.add("'+(name+'.swf')+'", {id:"'+name+'"});\n';
    }
}

fl.clipCopyString(code);
fl.outputPanel.trace('symbols exported as swfs, code is in your clipboard');

Все, что он делает - это циклически обрабатывает элементы библиотеки и для символов, экспортируемых для actionScript, он экспортирует файл swf (где имя класса используется в качестве имени файла) и генерирует фрагмент массового загрузчика.

Самый простой способ получить его во Flash это:

  1. Создать новый Flash JavaScript Файл (Файл> Создать> Flash Файл JavaScript)
  2. Вставьте код
  3. Сохраните файл как ASSymbolsToFiles или что-то в этом роде. Это файл должен по умолчанию для папки Commands, а это значит, что вы можете использовать его через Команды меню. Вы также можете при необходимости установите сочетание клавиш.

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

НТН, George

1 голос
/ 20 мая 2010

Вы не можете загрузить части SWF-файла, однако вы можете создать несколько SWF-файлов меньшего размера вместо большого. Чтобы это было выполнимо, вам нужно знать, как включать и исключать классы в swfs, чтобы вы могли создать один или несколько базовых swfs, которые содержат общие классы, и целую кучу «расширенных» swfs, которые содержат только несколько классов и используют общие классы из базовых swfs.

Этого можно достичь с помощью параметров командной строки mxmlc (компилятор actionscript / mxml, поставляемый с бесплатным flex sdk) - я не знаю, возможно ли это с помощью Flash IDE .

Конечно, это сделает вашу загрузку немного более сложной, но это сэкономит большую пропускную способность.

1 голос
/ 20 мая 2010

Я не думаю, что это возможно. Однако вы можете использовать JSFL для экспорта всех символов из вашей библиотеки в отдельные SWF-файлы.

Для этого сохраните следующее как «ExportSymbols.jsfl»

//prompt user for directory to export symbols to
var dir = fl.browseForFolderURL('Select export folder');

//get all the library items
var symbols = fl.getDocumentDOM().library.items;

for ( var i=0; i<symbols.length; i++ ) {
    var symbol = symbols[i];
    var name = symbol.name;
    var linkageClassName = symbol.linkageClassName;
    if ( linkageClassName != "" ) {
        var filename = dir + "/" + linkageClassName + ".swf";
        symbol.exportSWF(filename);
        fl.trace("Exported '" + name + "' to '" + filename + "'");
    }
}

Затем во Flash выберите «Команда»> «Выполнить команду ...» и перейдите к файлу ExportSymbols.jsfl.

Этот сценарий запросит у вас каталог экспорта, а затем экспортирует все символы, для которых linkageClassName указано как отдельные SWF-файлы.

Надеюсь, это поможет.

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

Если это просто хранилище символов, почему бы не разделить его?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...