У вас есть как минимум 2 варианта.
Вариант 1: Учитывая, что SWC-файл представляет собой zip-файл, содержащий swf со встроенными активами и XML-файл, описывающий содержимое, вы можете загрузить swc как zip, получить xml и проанализировать его.
var swcLoader:URLLoader = new URLLoader(new URLRequest('assets/assetsLib.swc'));
swcLoader.dataFormat = URLLoaderDataFormat.BINARY;
swcLoader.addEventListener(Event.COMPLETE, swcLoaded);
function swcLoaded(event:Event):void{
var zipFile:ZipFile = new ZipFile(event.target.data);
for(var i:int = 0; i < zipFile.entries.length; i++) {
var entry:ZipEntry = zipFile.entries[i];
if(entry.name == 'catalog.xml'){
var data:ByteArray = zipFile.getInput(entry);
var list:XML = new XML(zipFile.getInput(entry));
var nodes:XMLList = list.children();
for (var j:int = 0; j < nodes.length(); j++) {
if (nodes[j].name().localName == "libraries") {
var libraries:XML = nodes[j];
var libList:XMLList = libraries.children();
for(var k:int = 0 ; k < libList.length(); k++){
var library:XML = libList[k];
var classList:XMLList = library.children();
for(var l:int = 0 ; l < classList.length(); l++){
var classDef:XML = classList[l];
trace('class name: ' + [email protected]);
//var LibClass:Class = this.loaderInfo.applicationDomain.getDefinition([email protected]) as Class;
}
}
}
}
}
}
}
Я использую nochump library.
Option2: Так вам нужны только имена классов, чтобы сделать ваше подобие проще и вы упомянули, с помощью Flash CS4 (что заставляет меня предположить, у вас есть доступ к файлу .fla генерирующего SWC), вы можете написать простой скрипт JSFL который напишет эту строку кода для вас.
var doc = fl.getDocumentDOM();
var libItems = doc.library.items;
var libItemsNum = libItems.length;
var classesString = 'var '+doc.name.substr(0,doc.name.length-4)+'Classes = [';
var classesNum = 0;
var classes = [];
fl.outputPanel.clear();
for(var i = 0 ; i < libItemsNum; i++){
if(libItems[i].linkageExportForAS){
classes[classesNum] = libItems[i].linkageClassName;
classesNum++;
}
}
for(i = 0; i < classesNum; i++){
if(i < classesNum-1) classesString += '"'+classes[i]+'",';
else classesString += '"'+classes[i]+'"];';
}
fl.clipCopyString(classesString);
fl.trace(classesString);
Все, что вам нужно сделать, это: File> New> Flash JavaScript файла и вставьте код. Сохраните его в папке «Команды» с описательным именем, например: listExportClasses. Поскольку он находится в меню «Команды», если вы используете его достаточно часто, вы можете добавить комбинацию клавиш.
Что команда будет генерировать массив с именем файла fla и содержать имена экспортированных классов и удобно поместить его в буфер обмена.
например
var assetsLibClasses = ["Start1","Start2","Start3","Button","ColorBox","GameBackground","MenuBackground"];
Эй, спасибо много. Я склоняюсь к первому решению, поскольку оно более «самодостаточно». Я должен сказать, что через несколько лет в Python это чувствует ... ну, я скажу «обильный» ... Спасибо, что заставило меня начать изучать структуру .swc! –
Я бы порекомендовал jsfl, если честно, используя swc означает, что вы загружаете одну и ту же информацию дважды: один раз, когда вы загружаете основную swf с помощью swc, во второй раз, когда вы загружаете xml, вы разархивируете. стоит ли использовать библиотеку (zip) и заставить пользователя ждать, пока один и тот же контент дважды загрузится для строки кода? Тем не менее, результат тот же. Решение на полпути - это вручную скопировать/извлечь файл catalog.xml из swc и загрузить его: меньше времени загрузки, меньше необходимого кода. вы можете подумать о написании задачи xml Ant для этого разархивирования/очистки в flex/eclipse. Я никогда не пробовал питон, но он искушает меня использовать в blender.is это приятно? –