我需要将FLA中的时间轴动画转换为AS3代码(可能是通过XML语言)。问题是,实际上有数百个层和数千个帧。
虽然我理解JSFL的结构,但我不能通过循环到时间线->层->帧来找到“向导”动画。使用curFrame.isMotionObject()总是错误的。
下面是我正在尝试做的一个示例:
/* 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);发布于 2011-12-19 06:33:17
可以使用导出运动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包中的Animator/AnimatorFactory类感到满意,则可以执行以下操作:
fl.runScript(fl.configURI + 'Javascript/MotionXML.jsfl', 'copyMotionAsAS3');请注意,默认的补间类比其它补间引擎(如TweenLite )要慢,而且您可能还需要在补间期间使用计时器来确定补间何时结束,以便可以再次获得对补间对象的actionscript访问权限。
我在work for the AudiA8 site使用了一点MotionXML功能,因为我们必须在The Mill的一些漂亮的渲染上匹配一些交互性,我用这个功能写了一个importer for Mocha Keyframes to Flash timeline。
https://stackoverflow.com/questions/8548463
复制相似问题