ストレスフリーでライブラリのシンボルを編集モードにしたい


可能な限りライブラリパネルを触らず、頻繁に編集するシンボルにアクセスする方法を模索している。思いついたアイデアは以下の 2 点。

  • 同一の .fla ファイルを複数ウィンドウで開いておく
  • シンボルのブックマークを作る

同一の .fla ファイルを複数ウィンドウで開いておく

JSFL コマンドの

fl.getDocumentDOM().enterEditMode('newWindow');

を実行すると、ステージ上で選択中のシンボルを別ウィンドウで編集することができる。自分が知る限り、この JSFL コマンド以外で、シンボルを別ウィンドウで編集する手段はない。各ウィンドウに、頻繁に編集するシンボルを開いておくことで、タブの移動だけで作業を切り替えることができる。ただし、ライブラリパネルから任意のシンボルを開こうとすると、アクティブなウィンドウではなく、一番最初に開かれたオリジナルのウィンドウに展開されてしまうので注意が必要。

シンボルのブックマークを作る

頻繁に編集するシンボルをブックマークして、ワンクリックでアクセスする MXP を作った。ブックマークボタンを押すとリストコンポーネントに現在編集中のシンボルの libraryItem.name を追加し、リストから選択されたらオープンする仕組みだ。ソースは以下の通り。MMExecute の綺麗な書き方は無いのだろうか。

function addBookmark():Void {
MMExecute("fl.getDocumentDOM().exitEditMode();");
var itemName = MMExecute("(function hoge(){return fl.getDocumentDOM().selection[0].libraryItem.name})();");
MMExecute("fl.getDocumentDOM().enterEditMode('inPlace');");
this.itemList.addItem(itemName);
}
//button component
var buttonListener:Object = new Object();
buttonListener.click = function():Void {
addBookmark();
};
this.bookmarkButton.addEventListener("click", this.buttonListener);
//list component
var itemListListener:Object = new Object();
itemListListener.change = function (eventObj) {
MMExecute("fl.getDocumentDOM().library.editItem(\"" + eventObj.target.selectedItem.label + "\");");
}
this.itemList.addEventListener("change", itemListListener);

とりあえず動くが、シンボル名を取得するために荒技を行っているので、ステージ上に配置されたシンボルしかブックマークできない。ActionScript で配置するシンボルは、一度ステージに配置してからブックマークして、削除するしかない。「編集中のシンボル」というプロパティが JSFL に存在すればいいのだが。

カテゴリー: Flash, JSFL   パーマリンク

ストレスフリーでライブラリのシンボルを編集モードにしたい への4件のコメント

  1. michi より:

    僕はステージ上にテキストフィールド置いて、そこにjsコマンドを書いてます。
    /* ステージ上のTextField[ textField ]内に記述 */
    /*
    function hoge(){
    fl.getDocumentDOM().exitEditMode();
    var iName = fl.getDocumentDOM().selection[0].libraryItem.name;
    fl.getDocumentDOM().enterEditMode(‘inPlace’);
    return iName;
    }
    hoge();
    */
    /* ActionPanel */
    MMExecute( textField.text );
    あと、ライブラリのシンボル名は
    直接ライブラリ内のシンボルを選択して
    /*
    var iName = fl.getDocumentDOM().library.getSelectedItems()[0].name;
    */
    とかだとダメですかね。
    ちなみにコマンドパネルを作るときは
    ショートカットを設定したテスト用のコマンド(jsfl)を用意しておいて、作成中はそのjsflファイルを直接編集しながらテストしていって、出来上がったらflaファイル内のテキストフィールドに貼り付けるのがデバッグしやすいかなあと思ってます。
    \をエスケープしないとだめなのは若干手間ですが。

  2. Tanabe より:

    こんにちは。コメント有り難うございます。
    ■TextFieldにJSFL
    これは使えますね!
    swf書き出し→WindowSWFフォルダに配置→Flash再起動
    のステップを踏んでました。
    ■シンボル名
    あぁ、編集中のシンボルではなく、ライブラリから選択して、
    それをブックマークすればいいのですね。
    コマンドパネルを初めて作りましたが、
    骨が折れるなあというのが正直なところです。
    JSFLは書いて実行するだけですからね。。。
    http://www.gskinner.com/products/panelpack1/gSearch.php
    これが魅力的なのですが、$20の価値があるかどうか。。。

  3. michi より:

    gSearch、
    他の人が作ったFlashを修正しなきゃいけないときとかに
    良さそうですね。
    必要に迫られた時に、もう1回検討するくらいでいいような気もしますが。
    あと、コマンドパネルは一度閉じて、開きなおすと更新されてた気がします。

  4. Tanabe より:

    なんと、開き直すだけで良いんですね!
    ユーザフォルダのWindowSWFを更新しても、NetConnection Debuggerが開いてしまったり、fxxkなバグに悩まされていました。
    これは、Program Filesの方を更新して対処しました。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>