如何将多个标记的Actionscript动画片段翻译成Starling?

时间:2013-02-15 11:41:02

标签: actionscript-3 starling-framework

我是椋鸟的新手,这可能听起来像一个菜鸟问题,但这里什么都没有。

想象一下以下场景(在Flash中):

  • 名为test
  • 的动画片段
  • 测试有80帧
  • 测试有4个标签,每个20帧

当我在我的项目中编写脚本时。我从标签0-1(第1-19帧)开始循环。然后我告诉它在特定事件的标签2上循环。

这样,我不会添加或删除动画片段或仅仅实例化一个动画片段。

现在,如果我考虑在starling中实现它。我想在flash中制作4个动画片段。将它们导出为精灵表,然后在脚本中制作四个动画片段。添加哪个moviclip需要在变戏法者中播放,同时删除它的时间。

这样,每次我想在这些动画之间切换时,我都会增加'addchild'和'removechild'的开销成本。这是一种更具成本效益的方式吗?

1 个答案:

答案 0 :(得分:0)

我认为您想要导出单个剪辑,但是控制多重(4个动画)而不是单个剪辑。如果是这种情况,几年前我写了几个JSFL脚本(当CS6不在出口spritesheets时),它将.fla文件的主时间轴导出为图像序列,但是使用了框架标签。文件名。这样可以轻松地与TexturePacker集成。你可以看到它的视频here

这是一个JSFL片段,它将导出一个帧序列,其中包含基于帧标签生成的名称,这样可以很容易地在TexturePacker中进行管理:

var d   = (FLfile.getPlatform() == 'macos') ? '/' : '\\'; //delimiter
var doc = fl.getDocumentDOM();                            //document
var tl  = doc.getTimeline();tl.setSelectedLayers(0,true); //timeline
var cl = tl.layers[0];                                    //current layer
var numFrames = cl.frameCount;

var className = prompt("Name for your sequence", toClassName(doc.name.substr(0,doc.name.length-4)));
className = className.split('.')[0];//just in case the user adds .as
className = toClassName(className);//remove non alphabet chars
var docPath = doc.pathURI.substr(0,doc.pathURI.length - doc.name.length);
var exportPath = docPath+className+'_export'+d;
if(!FLfile.exists(exportPath)) FLfile.createFolder(exportPath);
fl.outputPanel.clear();
for(i = 0 ; i < numFrames; i++) {
    if(cl.frames[i].name != ''){//if frame is labelled
        tl.setSelectedFrames(i,i,true);
        doc.exportPNG(exportPath+cl.frames[i].name+lpad(''+i,4)+'.png',true,true);
    }
}
fl.trace("export complete!");
function lpad(number, length){
    var result = '' + number;
    while (result.length < length) result = '0' + result;
    return result;
}
function toClassName(input){
    return input.replace(/[^a-zA-Z]/g, "");
}

此外,我建议您查看Dynamic-Texture-Atlas-GeneratorFruitfly等生成工具。