/** * ステージのタイムラインと全てのシンボルのタイムラインを指定倍する。(1フレームのものは除く。) * * @param Number FRAME_STEP * @param Boolean トゥイーンの場合最後のキーフレームを延ばすか(TRUE) * 最後のフレームの前を延ばすかを変える。 * @description シーンには対応していません。 */ /** * 何倍に伸ばすかの設定値。 */ var FRAME_STEP = Number(prompt('何倍にフレームを伸ばしますか?')); /** * トゥイーンの最後のフレームを伸ばすか、その前のフレームを伸ばすかの設定値。 */ var TWEEN_END_ADJUST = !confirm("トゥイーンの最後のフレームを伸ばす。"); /** * 全てシンボルのタイムラインを入力された値から増やす。 * * @descritpion 制御しやすいように関数化。 */ function execute() { if (this.FRAME_STEP == 0) { alert('入力された数値が正しくありません。処理を中断しました。') return; } if (!confirm('処理を実行します。よろしいですか?')) return; // ルートのタイムラインを開く fl.getDocumentDOM().currentTimeline = 0 var arrSymbol = fl.getDocumentDOM().library.items; // ルートタイムラインの拡張 this.extendFrame(fl.getDocumentDOM().getTimeline(), this.FRAME_STEP); // シンボルを数え上げ for (var i in arrSymbol) { var currentSymbol = arrSymbol[i]; if (currentSymbol.itemType != 'graphic' && currentSymbol.itemType != 'movie clip') continue; fl.trace('[ ' + currentSymbol.name + ' ](' + currentSymbol.itemType + ') を処理しています。'); this.extendFrame(currentSymbol.timeline, this.FRAME_STEP); } alert('完了しました。'); } // なぜか定義とともに実行できない execute(); /** * 指定のタイムラインを指定の倍数で延ばす。 * * @param TimeLine currentTimeline * @param Number multiNum */ function extendFrame(currentTimeline, multiNum) { if (currentTimeline.frameCount == 1) return; // レイヤーを数え上げ for (var i = 0; i < currentTimeline.layers.length; i++) { var currentLayer = currentTimeline.layers[i]; var targetTotalFrames = currentLayer.frames.length * multiNum; var prevTweenType; var currentFrame; currentTimeline.currentLayer = i; // フレームを数え上げ for (var j = 0; j < targetTotalFrames; j += currentFrame.duration) { currentFrame = currentLayer.frames[j]; currentTimeline.currentFrame = j; // トゥイーンの際に、最後のキーフレームを延ばすかトゥイーン自体を延ばすかの場合わけ if (this.TWEEN_END_ADJUST && (prevTweenType == 'motion' || prevTweenType == 'shape')) { currentTimeline.insertFrames(currentFrame.duration * (multiNum - 1), false, j - 1); j += multiNum - 1; } else { currentTimeline.insertFrames(currentFrame.duration * (multiNum - 1), false, j); } // インスタンスのグラフィックシンボルのものの開始フレームを指定倍数増やす for (var k = 0; k < currentFrame.elements.length; k++) { var element = currentFrame.elements[k]; // 前のフレームが存在し、キーフレームかつグラフィックシンボルである場合 if ((element.symbolType == 'graphic') && (element.loop == 'single frame' || !currentLayer.motionTweenSync)) element.firstFrame *= multiNum; } if (currentFrame == null) prevTweenType = null; else prevTweenType = currentFrame.tweenType; } } }