Flashのタイムラインを伸ばしたり縮めたりするJSFL


もはやFlashという名前は消えつつありますが、一時期は仕事でかなり使っていたので、思い入れはあります。Flash。

とある長めのFlashのムービーを作っていたんですが、ほとんど作り終わってから、ちょっとムービーが短い、もうちょっと全体的に表示時間を長く、としたい時に、「タイムラインを1.5倍にしたい」と思いました。

が、そんな機能はFlashにはありませんでした…。

そういう時はJSFLがある!ということで探してみましたが、案外いいJSFLは見つからず、2倍にはできるんですが、細かい調整はできないものでした。

仕方がないので、自分で作ってみました。以下になります。

(※場合によってファイルが壊れることもあるので、バックアップはお忘れなく。)

/**
* Expand Timeline
*/
var _doc = fl.getDocumentDOM();
var _tl = _doc.getTimeline();
var _rate = parseFloat(prompt("Input rate.", "2"))
if(!isNaN(_rate) && _rate != 1 && _rate > 0){
main();
}
else{
alert("NG");
}
function main(){
var layerList = _tl.layers;
for(var l = 0, len = layerList.length; l < len; l++){
var layer = layerList[l];
var frameList = layer.frames;
_tl.setSelectedLayers(l);
if(_rate > 1){
for(var f = frameList.length - 1; f > 0; f--){
if(f == frameList[f].startFrame){
moveFrame(f, Math.ceil(f*_rate));
}
}
}
else{
var fin = 0;
var num = frameList.length
for(var f = 1; f < num; f++){
if(f == frameList[f].startFrame){
moveFrame(f, ~~(f*_rate));
fin = f;
}
}
_tl.removeFrames(~~(fin*_rate), num - 1);
}
}
}
function moveFrame(f, targetF){
_tl.setSelectedFrames(f, f);
_tl.copyFrames(f);
_tl.pasteFrames(targetF);
_tl.clearKeyframes(f);
}

端数が出ることがあるので、最終的に細かい調整は必要ですが、手でタイムラインを伸ばすよりは数十倍楽かと思います。

Flashを使うこともだいぶ減りましたが、こういう自分でなんとかできる感が好きだったりします。標準で用意して欲しい機能ですけれどね。。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です