0

我需要将 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);
4

1 回答 1

1

您可以使用 Export Motion 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,并且您可能还需要在补间期间使用计时器来计算补间何时完成,因此您可以获得对补间对象的操作脚本访问权限再次。

我在我们所做的 AudiA8 网站上使用了 MotionXML 功能,因为我们必须在The Mill的一些漂亮渲染上匹配一些交互性,并且我使用此功能为 Mocha 关键帧到 Flash 时间轴编写了一个导入器。

于 2011-12-18T22:33:17.227 回答