使用 JSFL 列出有 Linkage 的 Symbol 列表
今天被問到,如何得知 Flash IDE 中,Library 中有哪些 Symbol 有 link 到 Class。
以下,我寫了一個 JSFL 來產生這份報表。首先,先任意準備一些 Symbol,並任意設定他們的 linkage 設定:


JSFL 程式碼:
var lib = fl.getDocumentDOM().library;
var libItems = lib.items;
fl.outputPanel.clear();
fl.outputPanel.trace("symbol name\ttype\tclass\tbase class\texport in first frame");
for(var i=0; i<libItems.length; i++){
var item = libItems[i];
if(item.linkageExportForAS){
fl.outputPanel.trace(item.name
+ "\t" + item.itemType
+ "\t" + item.linkageClassName
+ "\t" + item.linkageBaseClass
+ "\t" + item.linkageExportInFirstFrame);
}
}
在 Flash IDE 執行指定的 *.jsfl 檔:

將我寫在 output 視窗的文字剪貼到 Excel 中看,比較清楚:

線上說明文件:http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/js/html/wwhelp.htm
==================================================
[2009-04-08-17-51]
其實,寫這個工具的目的是,若是我們想要將一個舊的 Flash 的視覺全部重新設計,設計好後新的 FLA 希望能將一些與程式有關的設定資料都一一仿照舊 FLA 中的結構,像是 instance name 與 linkage class 等等,因此以下我又增加了對場景物件的列表:
JSFL:
fl.outputPanel.clear();
fl.trace("parent"
+ "\t" + "timeline"
+ "\t" + "layer"
+ "\t" + "frame"
+ "\t" + "instance type"
+ "\t" + "instance name"
+ "\t" + "pos"
+ "\t" + "symbol type"
+ "\t" + "symbol name"
+ "\t" + "class"
+ "\t" + "base class"
+ "\t" + "export in first frame"
);
var dom = fl.getDocumentDOM();
traceContainer(null);
fl.trace("------------------------------------------------------------------");
fl.trace("symbol name"
+ "\t" + "type"
+ "\t" + "class"
+ "\t" + "base class"
+ "\t" + "export in first frame"
);
traceLibrary();
function traceContainer(container){
if(container!=null){
fl.getDocumentDOM().selectNone();
container.selected = true;
fl.getDocumentDOM().enterEditMode("inPlace");
}
var timeline = dom.getTimeline();
var layers, layer;
var frames, frame;
var elements, element;
var libraryItem;
var layer_locked, layer_visible;
layers = timeline.layers;
for(var idxLayer=0; idxLayer<layers.length; idxLayer++){
layer = layers[idxLayer];
frames = layer.frames;
timeline.currentLayer = idxLayer;
layer_locked = layer.locked;
layer_visible = layer.visible;
layer.locked = false;
layer.visible = true;
for(var idxFrame=0; idxFrame<frames.length; idxFrame++){
frame = frames[idxFrame];
elements = frame.elements;
timeline.currentFrame = idxFrame;
if(frame.startFrame == timeline.currentFrame){
for(var idxElement=0; idxElement<elements.length; idxElement++){
element = elements[idxElement];
traceElement(container, timeline, layer, frame, element);
if(element.elementType=="instance" && element.name!=""){
traceContainer(element);
}
}
}
}
layer.locked = layer_locked;
layer.visible = layer_visible;
}
if(container!=null){
fl.getDocumentDOM().exitEditMode();
container.selected = false;
}
}
function traceElement(container, timeline, layer, frame, element){
if(element.name=="")return;
var str = "";
switch(element.elementType){
case "shape":
case "shapeObj":
break;
case "text":
case "instance":
str += (container==null ? "root" : container.name);
str += '\t' + timeline.name;
str += '\t' + layer.name;
str += '\t' + timeline.currentFrame;
str += '\t' + element.elementType;
str += '\t' + element.name;
str += '\t' + '(' + element.x + ', ' + element.y + ')';
if(element.elementType=="instance"){
libraryItem = element.libraryItem;
str += '\t' + element.instanceType;
str += '\t' + libraryItem.name;
if(libraryItem.linkageExportForAS){
str += '\t' + libraryItem.linkageClassName;
str += '\t' + libraryItem.linkageBaseClass;
str += '\t' + libraryItem.linkageExportInFirstFrame;
}else{
str += '\t\t\t';
}
}else{
str += '\t\t\t\t\t';
}
}
if(str!=""){
fl.trace(str);
}
}
function traceLibrary(){
var library = dom.library;
var items = library.items;
for(var i=0; i<items.length; i++){
var item = items[i];
if(item.linkageExportForAS){
fl.trace(item.name
+ "\t" + item.itemType
+ "\t" + item.linkageClassName
+ "\t" + item.linkageBaseClass
+ "\t" + item.linkageExportInFirstFrame);
}
}
}
將輸出結果放到 Excel 看:
7 意見:
想請問 JSFL 是什麼東西哩~?@@
使用似 JavaScript 的語法,開發可擴充 Flash IDE 功能的命令程式。
就像我寫的工具面版一樣
只是我把jsfl包成mxp方便安裝
邦邦先生
我有個疑惑想請教您。
在元件庫裡的元件通常是在開發過程就 import 進來,有沒有方法可以透過 AS2 將外部的圖片放到元件庫,並連結設定識別名稱?
若是這項工作,是要在開發階段作的,我是聽過有人做過類似的事情。
他當時要使用大家常見的翻書範例,但是國外寫的那個範例中,每個頁面是必須包在 SWF 中,非動態載入,然後就會像你說的必須每個 Symbol 都有一個 linkage name,我這位朋友就是透過 JSFL 來作這項大量的匯入、取名的工作,以處理近 100 頁的翻書程式。
哈..他該不會也跟我用一樣的翻書範例吧!
謝謝您的回覆,若我處理的出來,再上來分享給大家!
該翻書範例後來不斷升級改版,最新版好像已經要付費了,不過我曾經在其他案子上要使用時,是 google 找到有人用該範例的舊版,改寫成 runtime 載入外部圖檔(或 SWF)的方式。
不過,該範例使用較舊的語法與架構設計,所以要作一些調整修改時,會花很多時間去修改、調整、猜測原著想法...
張貼意見