久しぶりにJSFLを自作する機会があったのでそのメモ。
いちいち何ができて何ができないのか分かりません。
■アイテム、インスタンスが『ボタン』かどうかを調べる
ライブラリにあるアイテムはitemTypeで「movie clip」、「graphic」、「button」等取得できます。
ステージ上にあるシンボルの場合instanceTypeでは、ムービークリップ、ボタン、グラフィックが一緒くた「symbol」としか表示されません。
何とかならないか調べたところ、ボタンインスタンスであればbuttonTrackingが取得できるのでそれで対応。
[js]
//ライブラリのアイテムがボタンか?
if(fl.getDocumentDOM().library.items[0].itemType == "button")
//ステージのインスタンスがボタンか?
if(fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0].buttonTracking != undefined)
[/js]
■キーフレームかどうかを調べる
そのフレームがキーフレームかを調べるには、公式リファレンス(注:PDF) の例そのまんまですが、frame.startFrameプロパティが配列のインデックスと一致しているかどうかを確認。
[js]
//キーフレームか否か?
var frameArray = fl.getDocumentDOM().getTimeline().layers[0].frames;
var n = frameArray.length;
for (i=0; i<n; i++) {
if (i==frameArray[i].startFrame) {
alert("Keyframe at: " + i);
}
}
//現在のタイムライン全体からキーフレームに置かれている要素一つ一つを走査する
var tl = fl.getDocumentDOM().getTimeline();
var layerNum = tl.layers.length;
for (var l = 0; l < layerNum; l++) {
var frameNum = tl.layers[l].frames.length;
for (var f = 0; f < frameNum; f++) {
//キーフレームか否か
if (f == tl.layers[l].frames[f].startFrame) {
var elementNum = tl.layers[l].frames[f].elements.length;
var elts = tl.layers[l].frames[f].elements;
for (var e = 0; e < elementNum; e++) {
var elt = elts[e];
fl.trace("element of Keyframe : " + elt);
}
}
}
}
[/js]
