もはやFlashという名前は消えつつありますが、一時期は仕事でかなり使っていたので、思い入れはあります。Flash。
とある長めのFlashのムービーを作っていたんですが、ほとんど作り終わってから、ちょっとムービーが短い、もうちょっと全体的に表示時間を長く、としたい時に、「タイムラインを1.5倍にしたい」と思いました。
が、そんな機能はFlashにはありませんでした…。
そういう時はJSFLがある!ということで探してみましたが、案外いいJSFLは見つからず、2倍にはできるんですが、細かい調整はできないものでした。
仕方がないので、自分で作ってみました。以下になります。
(※場合によってファイルが壊れることもあるので、バックアップはお忘れなく。)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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を使うこともだいぶ減りましたが、こういう自分でなんとかできる感が好きだったりします。標準で用意して欲しい機能ですけれどね。。