2011-12-17 36 views
0

我需要將FLA中的時間軸動畫轉換爲AS3代碼(可能是通過XML)。問題在於字面上有數百個圖層和數千個圖框。JSFL導出「指南」動畫

儘管我理解JSFL的結構,但我無法通過循環到時間軸 - >圖層 - >框架中找到「指南」動畫。使用curFrame.isMotionObject()總是爲false。

這裏是什麼,我試圖做一個樣本:

/* Gets all motions in all motion objects and exports to a file. */ 
fl.outputPanel.clear(); 

//store max layers/frames 
var fcnt = fl.getDocumentDOM().getTimeline().frameCount; 
var lcnt = fl.getDocumentDOM().getTimeline().layerCount; 
fl.trace("fl.getDocumentDOM().getTimeline().frameCount = " + fcnt); 
fl.trace("fl.getDocumentDOM().getTimeline().layerCount = " + lcnt); 

//store pre-run layers/frames: 
var origFr = fl.getDocumentDOM().getTimeline().currentFrame; 
var origLyr = fl.getDocumentDOM().getTimeline().currentLayer; 
fl.trace("fl.getDocumentDOM().getTimeline().currentFrame = " + origFr); 
fl.trace("fl.getDocumentDOM().getTimeline().currentLayer = " + origLyr); 

var totout = 0; 
var curFrm; 
var curl = origLyr; 
var curf = origFr; 
var outstr = ""; 

for (curf = 0; curf < fcnt; curf++) 
{ 
    // have the IDE go into the current frame: 
    fl.getDocumentDOM().getTimeline().currentFrame = curf; 

    // removed to test one layer only 
    //for (curl = 0; curl < lcnt; curl = lcnt) // curl++) // curl = lcnt) 
    //{ 

     // have the IDE go into the current layer: 
     fl.getDocumentDOM().getTimeline().currentLayer = curl; 

     if(curf > fl.getDocumentDOM().getTimeline().layers[curl].frames.length) 
      break; 

     curFrm = fl.getDocumentDOM().getTimeline().layers[curl].frames[curf]; 

     //this is always false. . . why? 
     if (
      curFrm.isMotionObject() 
      //&& curFrm.hasMotionPath() 
     ){ 
      totout++; 
      //curFrm.selectMotionPath(true); 
     } 
     else{ 
      outstr += "There is no motion path\n"; 
     } 

     //for testing: 
     break; 
    //} 
    //for testing: 
    //break; 
} 

//reset layers/frames back to pre-run status: 
fl.getDocumentDOM().getTimeline().currentFrame = origFr; 
fl.getDocumentDOM().getTimeline().currentLayer = origLyr; 

fl.trace(outstr); 
fl.trace("totout = " + totout); 
+0

您是否需要僅導出我們運動路徑的補間?另外,你有沒有嘗試導出到默認的運動xml? – 2011-12-18 00:27:39

+0

你能解釋一下嗎?不清楚「默認」運動路徑的含義。 。 。我錯過了文檔中的某些內容嗎?我認爲他們都是運動路徑;如果他們是別的東西,它會影響嗎? – iND 2011-12-18 03:28:13

+0

好吧,有經典補間可以有一個運動路徑應用到它,或不,然後是運動補間,它總是有一個運動路徑。如果你去命令>導出Motion XML我認爲xml格式對於兩種補間類型是不同的(據我所知) – 2011-12-18 10:28:12

回答

1

您可以使用導出運動XML命令,你可以從JSFL通過撥打:

fl.runScript(fl.configURI + 'Javascript/MotionXML.jsfl', 'exportMotionXML'); 

至於我記得Classic Tween XML格式不同於Motion Tween XML格式。 Motion XML功能非常方便且使用不足。 您也可以使用copyMotionXML,並在JSFL中處理XML,因爲JS引擎支持E4X

另外,如果你很高興與來自fl.motion包中的動畫/ AnimatorFactory類,你可以這樣做:

fl.runScript(fl.configURI + 'Javascript/MotionXML.jsfl', 'copyMotionAsAS3'); 

注意,默認補班比其他吐溫引擎慢,像​​,並且您也可能需要在補間完成時使用補間期間的計時器來計算補間完成時間,以便您可以再次獲得對補間對象的動作訪問權限。

我用MotionXML設有位在work for the AudiA8 site我們做了,因爲我們有過一些漂亮的The Mill呈現匹配一些互動,我使用此功能寫了importer for Mocha Keyframes到Flash時間軸。

+0

感謝您的回答。這導致了我需要的:用於訪問「指南」和其他動畫的JSFL代碼。在文件** MotionXML.jsfl **中,有一個函數'MotionXMLExporter.prototype.getXML'。這是Flash中用於從JSFL導出動態XML的主要FLA處理代碼。它處理很多不同的動畫類型,所以非常複雜;我很高興不必重寫這段代碼。但是,它確實提供了許多解決方案,用於深入FLA並查找數據。 – iND 2011-12-18 22:44:59

+0

很高興幫助!您可以檢查圖層的'layerType'屬性以檢查它是否是指導圖層,或者是否要訪問JSFL中應通過時間軸的'getGuidelines()'函數訪問的'指南'(視圖>指南>顯示指南)。查看[JSFL文檔](http://www.google.com/url?sa=t&rct=j&q=flash_cs5_extending.pdf&source=web&cd=1&ved=0CCEQFjAA&url=http%3A%2F%2Fhelp.adobe.com%2Fen_US% 2Fflash%2Fcs%2Fextend%2Fflash_cs5_extending.pdf&ei = YW3uTtvPIs3x8QPIq6WCCg&usg = AFQjCNHSRUtg54hM5TlKmDbqNiuFwU_S_A&sig2 = oJidGJuJFNvcxhO_QFnJcw)(pdf鏈接)瞭解更多詳情。 – 2011-12-18 22:50:33