2011-12-17 75 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