質問
フレーム上のすべてのアイテムを選択し、#0000FFなどの特定の色に合ったすべてのストロークを削除できるJSFL関数を探しています
基本的に、私は赤い鉛筆ストロークを使用して鉛筆ツールを使用して多くのメモを作成します。しかし、私が終わったら、私はFlashにすべての赤いストークを画面から削除し、他のすべてをそのままにしておくように伝えたいだけです。これに対する解決策はありますか?
解決
良い質問 !
JSFLドキュメントのドキュメントオブジェクトを見ると、ストロークを取得する唯一の方法はdocument.getCustomStroke()を使用しています。理想的には、形状オブジェクトはストロークを保存して情報を入力しますが、そうではありません:(
配列を使用して選択を制御しようとしました。
var doc = fl.getDocumentDOM();
doc.selectAll();
var s = new Array().concat(doc.selection);
var sl = s.length;
doc.selectNone();
for(var i = 0; i < sl ; i++){
doc.selection = s[i];
stroke = doc.getCustomStroke('selection')
fl.trace(stroke.color)
}
それはうまくいきませんでした。
次に、各オブジェクトを使用して選択しようとしました
doc.mouseClick({x:s[i].x, y:s[i].y}, false, false);
しかし、それはノートがどのような形をとることができるのであまり役に立たないので、ノートの左上隅にクリックすると、選択が見逃される可能性があります。選択を取得するためだけに各ピクセルをループすることは機能しません。
短い答えは、ストローク色を取得する唯一の方法がドキュメントの選択によるものではないからではありません。
しかし、いくつかの回避策があります:
IDEでは、検索と交換を使用し、テキストの代わりに色を選択し、メモの色を透明なものに置き換えます。残念ながら、これはそれほど解決策ではありません。ノートを非表示にするだけで、削除されません。
(ソース: sonic.net)JSFLからメモを簡単に取得できます:現在のタイムラインにすべてのメモを1つのレイヤーに配置し、「_notes」と言って、そのレイヤーを削除してください。
例えば
var doc = fl.getDocumentDOM();
if(!doc) alert('Pardon me! There is no document open to work with.');
fl.trace(deleteLayerByName('_notes'))
/*Returns true if the layer was found and deleted, otherwise returns false*/
function deleteLayerByName(name){
var timeline = doc.getTimeline();
var frame = timeline.currentFrame;
var layers = timeline.layers;
var layersNum = layers.length;
for(var i = 0 ; i < layersNum; i++){
if(layers[i].name == name){
timeline.deleteLayer(i)
return true;
}
}
return false;
}
うまくいけば、誰かがJSFLの色でオブジェクトを選択するための素晴らしいハックを提供できることを願っています。 IDEでできることはかなりありますが、 JSFLからそれらを行うことはできません :(
Hth