2011-01-10 39 views
1

我有一系列的大型fla文件正在發佈到swc中,然後直接用於flash項目。可能總共有1000多個對象。隨着數量的增長,最終編譯的swf會變得很大,所以我只想根據需要下載每個對象的swf。然後我需要能夠通過最終的AS項目中的類名訪問和克隆對象。從一個大型庫生成單個SWF文件的類別

問題是我發現導出每一個的唯一方法是1)複製並粘貼到一個新的fla文件2)雙擊'編輯'它強制它包括,3)重置鏈接類)名稱,因爲它已被擦除,4)發佈(即文件 - >發佈)並命名該swf。
這將需要相當長一段時間的1000+。

儘管可以右鍵單擊庫中的每個項目以將其保存爲swf,但似乎不包括類名稱等,只是項目。一旦我下載這個,我不能克隆多次使用它,而無需再次下載,這是不可接受的。

有沒有更快/更好的方法來產生這些瑞士法郎的?

(我沒考慮XFL簡單,但它看起來就像寫一個腳本來做到這一點給出了一些未知的出現將需要更長的時間,然後只是做手工。)

回答

1

你應該JSFL看看哪些允許您擴展Flash /編寫一個腳本,以便爲您自動執行此任務。

例如,您可以編寫一個腳本,循環訪問庫中的元素,並導出swf,僅導出爲動作腳本導出的動畫片段,並生成位於導出完成時位於剪貼板中的代碼位:

var doc = fl.getDocumentDOM(); 
var dir = 'file:///' + doc.path.substr(0,(doc.path.lastIndexOf('/')+1)); 
var lib = doc.library; 
var code = 'var queue:LoaderMax = new LoaderMax({name:"queue"});\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 += 'queue.append(new SWFLoader("'+name+'.swf", {name:"'+name+'"));\n'; 
    } 
} 

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

保存此作爲.jsfl文件來運行它,把它放在閃存(IDE)的命令文件夾,它會在命令菜單彈出的界面。

這並不完美,但它提供了一個什麼可以做的想法。首先是建立一個我想象的工作流程,然後爲它編寫腳本。

有幾件事情我不明白,雖然,我試圖打破它:

我有一系列的大FLA文件 ,正在發佈到SWC的 ,然後直接使用在閃光燈 項目。可能總共有1000+個以上的對象。隨着數量的增長,最終 編譯後的swf變得相當大,所以 我只想根據需要下載每個對象的 個別swf。

因此,有些資產需要稍後編碼。 我想象一個SWC將包含導出動作 導出多個動畫片段,並且可能有更多的fla文件具有不同類型的資產。

然後我需要能夠通過類名從 訪問和 克隆對象的最終AS項目。

你的意思是使用getDefinition實例化swf文件中的類嗎?

的問題是,我發現 出口每一個是1)複製和 其粘貼到一個新的FLA文件2)雙擊 點擊「編輯」的唯一方式,迫使它 包括, 3)重置聯繫人(類) 名稱,因爲它已被擦除,4)發佈 (即文件 - >發佈)並將其命名爲swf。

對於第1步,您是否可以不右鍵單擊MovieClip並選擇ExportSWF/ExportSWC(取決於您的需要)? 我不明白你的意思是'強迫它包括'。 你的意思是勾選Export for Actionscript?誰/什麼擦拭鏈接?

+0

感謝您的腳本想法,我會看看。回答你的問題。 1)通過getDefinition或僅通過獲取構造(例如Object(mc).contructor)作爲示例。 2)出於某種原因,當你點擊右鍵時,即使在一個資產的導出操作被選中,並且一個類名被設置,它也不包括類信息。只有當你使用文件 - >發佈它纔會被包含。不知道爲什麼。 – Preston 2011-01-11 01:01:10