- 2008年12月12日 18:03
- JSFL
frameを参照する
JSFLを使えば、タイムラインのフレームに直接actionscriptを挿入することができます。以下のソースでは、ドキュメントのカレントシーンの一番最上面のレイヤーの1フレーム目を参照し,actionscriptを挿入します。
var frame = fl.getDocumentDOM().getTimeline().layers[0].frames[0] frame.actionScript = "this._visible = false"
まず、getDocumentDOMで現在開いているドキュメントを参照し、getTimelineでカレントシーンを示すtimeLineオブジェクト取得します。次に、timeLineオブジェクトに内包されているlayersプロパティを参照します。このプロパティ値は配列で、該当シーンのレイヤーを上から順に格納します。そこで必要なlayerオブジェクトを取得したら、layerオブジェクトのframesプロパティを参照します。これは、layersプロパティと同様、配列で管理され、フレーム1はframes[0]で取得します。IDE上はフレーム1ですが、配列参照のindex値は0であることに注意してください。
フレームにactionscriptを挿入する
frameオブジェクトはactionScriptプロパティを内包しています。このプロパティの型はstringで、指定した値がそのまま埋め込まれます。改行には"\n"を使用します。
Array.join()を使ってスマートに
actionScrilptプロパティはString指定のため、改行が含まれているソースは非常に複雑かつ読みにくい物となってしまいます。これでは、今後のメンテナンスにも影響を与えかねません
//煩雑なソース
frame.actionScript = "var flag:Boolean = false; \n if(!flag){\n this._visible = false;\n flag = true;\n };"
この問題は、Array.join()を活用することで解決できます。joinは、配列の要素をを引数で指定した文字列で連結し、Stringに変換します。以下のソースでは、指定する区切りの文字列に改行指定"\n"を指定することで、改行指定を挿入する手間を省き、かつ見やすいソースになっています。
frame.actionScript = [
'var flag:Boolean = false;',
'if(!flag){',
'this._visible = false;',
'flag = true;',
'};'
].join("\n");



