root/mxp/LayerIntegration/src/LayerIntegration.jsfl

リビジョン 2803, 5.4 kB (コミッタ: Hiiragi, コミット時期: 3 年 前)

--

Line 
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
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。