久しぶりにJSFLを自作する機会があったのでそのメモ。
いちいち何ができて何ができないのか分かりません。
■アイテム、インスタンスが『ボタン』かどうかを調べる
ライブラリにあるアイテムはitemTypeで「movie clip」、「graphic」、「button」等取得できます。
ステージ上にあるシンボルの場合instanceTypeでは、ムービークリップ、ボタン、グラフィックが一緒くた「symbol」としか表示されません。
何とかならないか調べたところ、ボタンインスタンスであればbuttonTrackingが取得できるのでそれで対応。
//ライブラリのアイテムがボタンか? if(fl.getDocumentDOM().library.items[0].itemType == "button") //ステージのインスタンスがボタンか? if(fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0].buttonTracking != undefined)
■キーフレームかどうかを調べる
そのフレームがキーフレームかを調べるには、公式リファレンス(注:PDF) の例そのまんまですが、frame.startFrameプロパティが配列のインデックスと一致しているかどうかを確認。
//キーフレームか否か? 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); } } } }