3

.swcを介してFlashCS4シンボルをFlashBuilderに取り込む方法を知っています。クラス名はメインクラスで使用できるようになりますが、各名前をコードに書き込んで、それらを1つずつインスタンス化することしかできません。

.swcをループして、名前を指定せずにそのアセットを配列にロードし、インスタンス化のためにこれらの名前を取得して使用するにはどうすればよいですか?理想的には、(中途半端な擬似コード)のようなもの:

the_instances: = new Array
for(i=0; i<the_SWC.length; i++)
{
    tmp = new eval( the_SWC[i].name + '\(\)' )
    the_instances.push( tmp )
}

または他の何かをループでそれらの名前を取得します。

4

1 に答える 1

3

少なくとも 2 つのオプションがあります。

オプション 1: SWC ファイルは、アセットが埋め込まれた swf とコンテンツを記述した xml ファイルを含む zip ファイルであるため、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 ライブラリを使用しています。

オプション 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);

ファイル > 新規 > Flash Javascript ファイルを選択し、コードを貼り付けるだけです。listExportClasses のようなわかりやすい名前で Commands フォルダーに保存します。これは Commands メニューにあるため、これを頻繁に使用する場合は、キーボード ショートカットを追加できます。

コマンドは、fla ファイルの名前で配列を生成し、エクスポートされたクラスの名前を含み、クリップボードに便利に配置します。

例えば

var assetsLibClasses = ["Start1","Start2","Start3","Button","ColorBox","GameBackground","MenuBackground"];
于 2009-11-21T11:48:43.923 に答える