我知道如何通过.swc将Flash CS4符号获取到Flash Builder中。
类名在主类中变得可用,但是我只能将它们一个一个地实例化,并将每个名称写入代码中。
如何遍历.swc并将其资产加载到数组中而不提及其名称,然后获取并使用这些名称进行实例化?理想情况下,类似于(半辅助伪代码):
the_instances: = new Array
for(i=0; i<the_SWC.length; i++)
{
tmp = new eval( the_SWC[i].name + '\(\)' )
the_instances.push( tmp )
}
或其他任何东西来使这些名称循环。
最佳答案
您至少有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: ' + classDef.@name);
//var LibClass:Class = this.loaderInfo.applicationDomain.getDefinition(classDef.@name) as Class;
}
}
}
}
}
}
}
我正在使用nochump library。
选项2:
由于只需要类名称即可使您的工作变得更轻松,并且您提到使用Flash CS4(这使我假设您可以访问生成swc的.fla文件),因此可以编写一个简单的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 File并粘贴代码。
使用描述性名称将其保存在Commands文件夹中,例如:listExportClasses。
由于它位于“命令”菜单中,因此如果您经常使用它,则可以添加键盘快捷键。
该命令将生成一个带有fla文件名称的数组,并包含导出的类的名称,并将其方便地放置在剪贴板中。
例如
var assetsLibClasses = ["Start1","Start2","Start3","Button","ColorBox","GameBackground","MenuBackground"];