Home > JSFL・JSF・JSX

JSFL・JSF・JSX Archive

ステージにあるシェイプやグループ化されたものを、連番付きのシンボルに一括変換するJSFL


一昨日くらいでしたか、「ステージにあるシェイプやグループ化されたものを、連番付きのシンボルに一括変換するJSFLってないの?」とTLに流れていたので、自分の勉強がてら、それっぽいのを作ってみました。

で、作成しているときにハマッたことを、書いておきます。

同一フレーム内には、シェイプは一つが良さそう

DLしたflaファイル(CS3形式)とJSFLを試してもらうと分かると思いますが、ステージ上に置いてあるシェイプやテキストなどが、MovieClipシンボル(hoge_000_mcみたい)に連番付きで変換されます。

その際、同一フレーム内にシェイプを二つ置いていると、ちょっと変なことになります。

シェイプがそれぞれMovieClipシンボルに変換されるのではなく、二つのシェイプが一つのMovieClipシンボルに変換されてしまうんですね…

なので、このJSFLを使う場合は、同一フレーム内にはシェイプは一つにしておくといいと思います。

複数シェイプを配置する場合は、(サンプル通りに)グループ化しておくと問題なく使えます。

elementsに関して

for文の中のelementsの箇所なんですが、elements[i]なんじゃない? と思われた方もいらっしゃるかもしれません。

elementsの説明・その1

こんな感じで、シェイプが二つあったとします。

この状態で、elements[0]をconvertToSymbolで、シンボルに変換したとします。

elementsの説明・その2

すると、こんな感じになるかと思いますよね?

ところが、実際は…

elementsの説明・その3

このようになります。(シンボル化したものは、elementsの最後尾に移動し、残りがひとつずつ前に押し出される)

なので、for文が回っているうちは、常にelementsの先頭(0)を取得してあげると、まだシンボルに変換していないものを選択出来ます。

convertToSymbolした後は…

先の手順で要素を選択し、convertToSymbloを使って、シンボルに変換すると、その要素は選択されたままになっています。

選択を解除せずにfor文を回してしまうと、MovieClipが入れ子の状態になってしまうので、fl.getDocumentDOM().selectNone();を使って、選択を解除しています。

とりあえず作ったものなんで、使い勝手は悪いかと思いますが…

JSFでレイヤー名を取得する


JSFを使ってやりたいことがあって、いろいろ試しているので、忘れないようにメモ。

レイヤー名を取得する

レイヤーが3つ作成した場合

こんな感じでフォルダがあって、それぞれのレイヤー名を取得したい場合、こんな感じでJSFを書くと取得出来た。

var count = fw.getDocumentDOM().layers.length;

for (var i = 0; i < count; i++){
	alert(fw.getDocumentDOM().layers[i].name);
}

これを実行すると、レイヤー1→レイヤー2→Webレイヤーと表示される。

layers[0]は、一番下にあるレイヤー1ということになります。

サブフォルダを作成した場合

次に、上の様にサブフォルダを作成してみた場合、先と同じJSFを実行してみると…

レイヤー1→レイヤー3→レイヤー2→Webレイヤーと表示される。

layers[0]は、一番下にあるレイヤー3ではなく、レイヤー1(親フォルダ)になるんですねぇ…

Flashとは逆になる

ちなみにですが、JSFLを使ってFlashのレイヤーを取得する場合は、レイヤーのインデックス0は、一番上のレイヤーになります。

ライブラリ内のフォント(静的・ダイナミック)を一括置換してくれるJSFL


Progressionのスライドコンテンツを使ってスライドを作成している時に、僕はよくあることなんですが…

フォントを変更しようかなぁ…と思ったら、意外と面倒だったりします。

スライドの枚数分、MovieClipを作成したり、一つのMovieClip内のタイムラインにコンテンツを配置している場合。

フォントを変更する為だけに、上記リンクのJSFLを実行するのも何だなと…

検索して置換

FlashIDEのメニューの編集>検索して置換を使ってやろうかな? と思っても…

検索して置換

ライブラリ内のアイテムは、上手いことやってくれません…

JSFLを書いてみた

なので、JSFLを書いてみました。

ライブラリ内のアイテム

例えば、こんな感じでライブラリ内にアイテムがあったとします。

aaa(MovieClip)
タイムライン上(2フレーム)に、ダイナミックテキストを配置
bbb(MovieClip)
タイムライン上(1フレーム)に、ダイナミックテキストを(複数レイヤーに)配置
eee(MovieClip)
タイムライン上(4フレーム)に、静的テキストを配置

JSFLを実行すると、ライブラリ内のアイテム全てに対して、フォントを変更するという作業を行います。(ライブラリ内のMovieClipを選択する必要はありません!)

ライブラリ内のフォルダ構造とか、複数フレームに配置してあるとか、複数レイヤーに配置してあるとかは関係なく、サクッと置換してくれます。

注意点

ただ注意することは、全てのフォントに対してJSFLが実行されてしまいます。

つまり複数のフォントを使用していたとしても、それが一つの(指定した)フォントに置き換えられてしまうということです。

ダウンロード

僕が欲しくて作ったものなので、他の方にも使い勝手がいいかは分かりませんが…

DLしたzip内には、この記事のキャプチャに使用したflaファイル(CS3形式)が入っています。

それを開いて、ReplaceFonts.JSFLを実行してみてください。

使いたい方は、ここからどうぞ!

三角ボタンからだと、JSFLが実行されない場合がある


以前、『JSFLについて、まとめてみました。』という記事の中で、IDE側でJSFLファイルを開いておいて、三角ボタンで実行すると、エラーの行番号が表示されないと書きました。

あれこれやっていたら、三角ボタンからの実行だと、JSFL自体も実行されない場合があるようです。

CS3の場合

ライブラリ内に「Hoge」というフォルダを作成。その中に、「hogehoge」と「piyopiyo」というMovieClipを入れておきます。flaファイルは、FolderOpen.flaとして保存しておきます。

で、以下のJSFLを用意して、三角ボタンから実行します。

var doc = fl.getDocumentDOM();

fl.trace(doc.name);

doc.library.selectItem("Hoge");

//Folderを展開
doc.library.expandFolder(true);

//Folderを閉じる
//fl.getDocumentDOM().library.expandFolder(false);

すると、Hogeというフォルダは選択されるのですが、フォルダを展開するというJSFLは実行されませんでした。

三角ボタンからの実行だと、アクティブなドキュメントが違うのかな? と思ったので、doc.nameをtraceしてみると…

FolderOpen.fla

問題ない。う~ん、何でだろう?

同じファイルをメニューのコマンド>コマンドの実行から選択したり、JSFLファイルをダブルクリックで実行すると、きちんとフォルダは展開されるんですよねぇ…

(三角ボタンを押して)正しいコードを書いているのに、何故かJSFLが実行されないという場合は、試しに同じファイルを、メニューのコマンドやダブルクリックで実行してみたら、きちんと動作するかも…

CS4&CS5の場合

上記のコードをCS4&CS5で実行してみましたが、(三角ボタン・コマンドから実行・ダブルクリックのいずれも)フォルダは選択される&アクティブなドキュメントはtraceされるものの、フォルダが展開されることはありませんでした。

まぁ、フォルダを展開するっていうJSFLを使うことは、あまりないと思いますけど…

(僕だけの環境かもしれませんが)他にもCS3では動くけど、CS4やCS5だと動かないコードがあったり…

何なんでしょうね?

Progression4のスライド作成JSFLを、アップデート


以前に作成した『Progression4でスライドを作る際に、ちょっと便利なJSFL』をアップデートしました。

前回までは更新の際、作成したスライドの枚数と修正後のXMLのノード数が一致していないと更新作業が上手いこといってくれませんでしたが、その点を修正してあります。

例えばですが、(Create~.jsflを使って)新規にスライドを5枚作成したとします。

その後、XMLに修正を加え、修正後のノード数がスライド10枚分になったとしても、きちんと更新してくれるということです。(DLしたZipの中に、サンプルのXMLが二つ入っていますので、そちらを使って更新を試してみてください!)

その逆でも、もちろんOKです。

新たに追加したこと

複数MovieClip、タイムラインに共通しているのですが、スライドを作成すると、『Slides』フォルダ内にMovieClipが作成されるように変更しました。

あとは、XMLを編集して、Update~.jsflを実行してください。

UpdateのJSFLを使う場合は、Slidesフォルダを選択した状態で、JSFLを実行してください。

Slidesフォルダを選択していない状態でJSFLを実行してしまうと、変な具合に更新されてしまうことがあります。

JSFLにも、Slidesフォルダを選択してからUpdate処理を行うという記述を入れているのですが、時折きちんと認識してくれないっぽいんですよねぇ…(CS5だと、フォルダを選択しなくても上手くいく場合があったり…)

ダウンロード

ダウンロードはこちらからどうぞ。

ホーム > JSFL・JSF・JSX

Search
Feeds
Meta

flashDevelopスポンサー

Return to page top