[ jsfl ] タイムライン上のシンボルを名前で検索していれかえるjsfl

2011/02/9

タイムライン上でシンボルがアニメーションしていたり、おいてあります。

1102_jsfl2_fig1

各シンボル名がpg1からはじまるものとして、jsflに検索と置換条件を設定します。

ここでは検索名にpg1、置換部分にpg2として、置換後に入っているフォルダをfolder2としました。

1102_jsfl2_fig2

それでシンボルを入れ替えたいレイヤーを選択したあと、jsflを実行すると、
pg2Title, pg2Mainというふうにタイムライン上のシンボルが全部いれかわります。
jsflの中身は、検索条件にレイヤー名は含まれておらず、
選択したレイヤーのキーフレームをすべて抽出。キーフレーム上のシンボルのライブラリ名を確認。
検索して、ライブラリの置換条件にあうものとさしかえ。
というふうになっています。


var searchStr = new RegExp("pg1"); //検索シンボルの一部名前
var replaceStr = "pg2" //置き換える名前(置換後にあるんだったら一部でもOK)
var folderPath = "folder2" //置き換えるアイテムが入っているフォルダ名

var time = fl.getDocumentDOM().getTimeline();
var layerNums = time.getSelectedLayers();
var i,j,k;
var layers, frames, layerNum, elem, elems;
layers = time.layers;
var oldName, newName;
var index, library;
library = fl.getDocumentDOM().library;
for(i = 0; i < layerNums.length; i++){
	layerNum = layerNums[i];
	frames = layers[layerNum].frames;
	for(j = 0; j < frames.length; j++){
		if(j == frames[j].startFrame){
			time.setSelectedFrames(j, j);
			elems = frames[j].elements;
			for(k = 0; k < elems.length; k++){
				elem = elems[k];
				if(elem.elementType == "instance"){
					oldName = elem.libraryItem.name;
					newName = oldName.replace(searchStr, replaceStr);
					newName = newName.substr(newName.lastIndexOf("/") + 1);
					index = library.findItemIndex(folderPath + "/" + newName);
					if(index != ""){
						elem.libraryItem = library.items[index];
					}
				}
			}
		}
	}
}
LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る