0

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

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

  • 一个名为 test 的影片剪辑
  • 测试有 80 帧
  • 测试有 4 个标签,每个标签 20 帧

当我在我的项目中编写测试脚本时。我让它从标签 0-1(帧 1-19)循环。然后我告诉它在某个事件的标签 2 上循环。

这样,我就不会添加或删除一个影片剪辑或实例化一个东西。

现在,如果我考虑在八哥中实现它。我正在考虑在 Flash 中制作 4 个电影剪辑。将它们导出为精灵表,然后在脚本中制作四个影片剪辑。添加需要在杂耍者中播放的任何moviclip,并在那时同样删除它。

这样,每次我想在这些动画之间切换时,我都会添加“addchild”和“removechild”的开销成本。这是一种更经济有效的方式吗?

4

1 回答 1

0

我假设您要导出单个剪辑,但要控制多重(4 个动画)而不是单个剪辑。如果是这种情况,我在几年前写了一些 JSFL 脚本(当时 CS6 还没有导出 spritesheets),它们将 .fla 文档的主时间线导出为图像序列,但在文件名。这使得与TexturePacker集成变得容易。你可以在这里看到它的视频。

这是一个 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等生成器工具。

于 2013-02-15T15:51:33.673 回答