| 1 |
//宣言ショートカット |
|---|
| 2 |
var dom = fl.getDocumentDOM(); |
|---|
| 3 |
var lib = dom.library; |
|---|
| 4 |
var timeline = dom.getTimeline() |
|---|
| 5 |
|
|---|
| 6 |
LoopLevel0:if (dom == null) |
|---|
| 7 |
{ |
|---|
| 8 |
alert("現在のドキュメントを取得できませんでした。"); |
|---|
| 9 |
} else { |
|---|
| 10 |
//選ばれているレイヤーのインデックスを取得 |
|---|
| 11 |
var layers = getLayers(); |
|---|
| 12 |
|
|---|
| 13 |
if (layers.length <= 1) { |
|---|
| 14 |
alert("2つ以上のレイヤーを選択してください。"); |
|---|
| 15 |
break LoopLevel0; |
|---|
| 16 |
} |
|---|
| 17 |
|
|---|
| 18 |
//統合するレイヤー名を表示 |
|---|
| 19 |
var outputStr = ""; |
|---|
| 20 |
for (i in layers) { |
|---|
| 21 |
outputStr += timeline.layers[layers[i]].name + " , "; |
|---|
| 22 |
} |
|---|
| 23 |
fl.trace(outputStr + " を統合します。"); |
|---|
| 24 |
|
|---|
| 25 |
//結合したレイヤーの名前を入力 |
|---|
| 26 |
var layerName = prompt("新しく作成するレイヤーの名前を入力してください。", "New Layer by JSFL"); |
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 |
if (layerName != null) { |
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 |
//選ばれてるレイヤーの最上段の上に配置用新規レイヤーを置く |
|---|
| 33 |
var putLayerNumber = layers[0]; |
|---|
| 34 |
var centerNumber = putLayerNumber; |
|---|
| 35 |
timeline.setSelectedLayers(centerNumber); |
|---|
| 36 |
timeline.addNewLayer(layerName, "normal", true); |
|---|
| 37 |
centerNumber += 1; |
|---|
| 38 |
|
|---|
| 39 |
//レイヤーを並べなおして選択レイヤーを連続配置させる |
|---|
| 40 |
for (i=0;i<layers.length;i++) { |
|---|
| 41 |
timeline.reorderLayer((layers[i]+1), centerNumber+i, true); |
|---|
| 42 |
} |
|---|
| 43 |
|
|---|
| 44 |
//配置用新規レイヤーを置いた際に選択が消えてるので選びなおす |
|---|
| 45 |
for (i=0;i<layers.length;i++) { |
|---|
| 46 |
if (i == 0) { |
|---|
| 47 |
timeline.setSelectedLayers((centerNumber+i),true) |
|---|
| 48 |
} else { |
|---|
| 49 |
timeline.setSelectedLayers((centerNumber+i),false) |
|---|
| 50 |
} |
|---|
| 51 |
|
|---|
| 52 |
} |
|---|
| 53 |
|
|---|
| 54 |
//順番が入れ替わったので、再度取得 |
|---|
| 55 |
layers = getLayers(); |
|---|
| 56 |
|
|---|
| 57 |
//キーフレームをどれだけ作ればいいのか調べる |
|---|
| 58 |
var arrayKeyframe = [0]; |
|---|
| 59 |
for (i=0;i<layers.length;i++) { |
|---|
| 60 |
var frameLength = timeline.layers[layers[i]].frameCount; |
|---|
| 61 |
//fl.trace("layers[" + layers[i] + "]のframeLength = " + frameLength); |
|---|
| 62 |
for (j=0;j<frameLength;j) { |
|---|
| 63 |
var dur = timeline.layers[layers[i]].frames[j].duration; |
|---|
| 64 |
//fl.trace(dur); |
|---|
| 65 |
// for (k in arrayKeyframe) { |
|---|
| 66 |
// if (arrayKeyframe[k] == j) break; |
|---|
| 67 |
// else if (k != arrayKeyframe.length-1) continue; |
|---|
| 68 |
// arrayKeyframe.push(j); |
|---|
| 69 |
// } |
|---|
| 70 |
arrayKeyframe.push(j); |
|---|
| 71 |
j += dur; |
|---|
| 72 |
} |
|---|
| 73 |
arrayKeyframe.push(j); |
|---|
| 74 |
} |
|---|
| 75 |
|
|---|
| 76 |
//同一の数値を除く |
|---|
| 77 |
var tempArr = []; |
|---|
| 78 |
//fl.trace("arrayKeyframe = " + arrayKeyframe); |
|---|
| 79 |
|
|---|
| 80 |
for (i=arrayKeyframe.length-1;i>=0;i--) { |
|---|
| 81 |
for (j=0;j<i;j++) { |
|---|
| 82 |
if (arrayKeyframe[j] == arrayKeyframe[i]) { |
|---|
| 83 |
arrayKeyframe[j] = -1; |
|---|
| 84 |
} |
|---|
| 85 |
} |
|---|
| 86 |
} |
|---|
| 87 |
|
|---|
| 88 |
for (i=arrayKeyframe.length-1;i>=0;i--) { |
|---|
| 89 |
if (arrayKeyframe[i] != -1) { |
|---|
| 90 |
tempArr.push(arrayKeyframe[i]); |
|---|
| 91 |
} |
|---|
| 92 |
} |
|---|
| 93 |
arrayKeyframe = tempArr; |
|---|
| 94 |
//fl.trace("arrayKeyframe = " + arrayKeyframe); |
|---|
| 95 |
|
|---|
| 96 |
//順番を昇順にする |
|---|
| 97 |
arrayKeyframe = numSort(arrayKeyframe); |
|---|
| 98 |
|
|---|
| 99 |
//fl.trace("arrayKeyframe = " + arrayKeyframe); |
|---|
| 100 |
|
|---|
| 101 |
//配置用新規レイヤーにキーフレームを配置する |
|---|
| 102 |
timeline.setSelectedLayers(putLayerNumber); |
|---|
| 103 |
for (i in arrayKeyframe) { |
|---|
| 104 |
if (arrayKeyframe[i] != 0) { |
|---|
| 105 |
timeline.convertToKeyframes(arrayKeyframe[i]); |
|---|
| 106 |
} |
|---|
| 107 |
} |
|---|
| 108 |
|
|---|
| 109 |
//下から順に積み重ねていく |
|---|
| 110 |
for (i=layers.length-1;i>=0;i--) { |
|---|
| 111 |
for (j=0;j<arrayKeyframe.length;j++) { |
|---|
| 112 |
timeline.setSelectedLayers(layers[i],true) |
|---|
| 113 |
//fl.trace(timeline.layers[layers[i]].frameCount + " , " + arrayKeyframe[j]); |
|---|
| 114 |
if (arrayKeyframe[j]<timeline.layers[layers[i]].frameCount) { |
|---|
| 115 |
timeline.setSelectedFrames(arrayKeyframe[j],(arrayKeyframe[j]+1)); |
|---|
| 116 |
//エレメントがある場合にのみC&P |
|---|
| 117 |
if (timeline.layers[layers[i]].frames[arrayKeyframe[j]].elements.length > 0) { |
|---|
| 118 |
//モーショントゥイーンを無しにしておかないとclipCopy()でエラーがでる |
|---|
| 119 |
timeline.layers[layers[i]].frames[arrayKeyframe[j]].tweenType = "none"; |
|---|
| 120 |
dom.clipCopy(); |
|---|
| 121 |
|
|---|
| 122 |
timeline.setSelectedLayers((putLayerNumber),true); |
|---|
| 123 |
timeline.setSelectedFrames(arrayKeyframe[j],(arrayKeyframe[j]+1)); |
|---|
| 124 |
dom.clipPaste(true) |
|---|
| 125 |
} |
|---|
| 126 |
} |
|---|
| 127 |
} |
|---|
| 128 |
} |
|---|
| 129 |
|
|---|
| 130 |
//選択されていたレイヤー群を消去するかどうか |
|---|
| 131 |
if (confirm("選択された元レイヤーを消去しますか?")) { |
|---|
| 132 |
for(i=0;i<layers.length;i++) { |
|---|
| 133 |
if (i == 0) { |
|---|
| 134 |
timeline.setSelectedLayers(layers[i],true) |
|---|
| 135 |
} else { |
|---|
| 136 |
timeline.setSelectedLayers(layers[i],false) |
|---|
| 137 |
} |
|---|
| 138 |
} |
|---|
| 139 |
timeline.deleteLayer(); |
|---|
| 140 |
} |
|---|
| 141 |
|
|---|
| 142 |
//結合したレイヤーの最後のフレームを消去(空白キーフレームのはず) |
|---|
| 143 |
var len = timeline.layers[putLayerNumber].frameCount; |
|---|
| 144 |
timeline.setSelectedLayers(putLayerNumber,true); |
|---|
| 145 |
timeline.removeFrames(len-1); |
|---|
| 146 |
|
|---|
| 147 |
alert("レイヤーの結合が完了しました。\nデバッグ中に付き、結合レイヤーの確認をお願いします。"); |
|---|
| 148 |
|
|---|
| 149 |
} else { |
|---|
| 150 |
alert("キャンセルされました"); |
|---|
| 151 |
} |
|---|
| 152 |
|
|---|
| 153 |
|
|---|
| 154 |
} |
|---|
| 155 |
|
|---|
| 156 |
|
|---|
| 157 |
|
|---|
| 158 |
function getLayers() { |
|---|
| 159 |
var layers = timeline.getSelectedLayers(); |
|---|
| 160 |
|
|---|
| 161 |
layers = numSort(layers); |
|---|
| 162 |
|
|---|
| 163 |
return layers; |
|---|
| 164 |
} |
|---|
| 165 |
|
|---|
| 166 |
function numSort(param) { |
|---|
| 167 |
//Sort |
|---|
| 168 |
param.sort( |
|---|
| 169 |
//数値ソート |
|---|
| 170 |
this.number = function(a,b) { |
|---|
| 171 |
if(!isNaN(a) && !isNaN(b)) {return a-b;} |
|---|
| 172 |
else if(isNaN(a) && !isNaN(b)) {return 1;} |
|---|
| 173 |
else if(!isNaN(a) && isNaN(b)) {return -1;} |
|---|
| 174 |
else {if(a+"" === b+"") {return 0;} |
|---|
| 175 |
return (a+"" > b+"")? 1 : -1;} |
|---|
| 176 |
} |
|---|
| 177 |
); |
|---|
| 178 |
return param; |
|---|
| 179 |
} |
|---|
| 180 |
|
|---|
| 181 |
|
|---|
| 182 |
|
|---|
| 183 |
|
|---|
| 184 |
|
|---|
| 185 |
|
|---|
| 186 |
|
|---|
| 187 |
|
|---|
| 188 |
|
|---|