前から欲しかった拡張パネルをSWFで作ってみる
ちょっと大き目のキャンペーンサイトをオーサリングするたびに思っていたんですが、
MCインスタンスを開いて、ネストされたインスタンス名をつけて、また戻って。。。という風に行き来が激しくて無駄な動きが多くなってきます。
一応デフォルトとしてウインドウの複製(ctrl+alt+k)というのがあるのですが、他のオーサリングツールと同時起動していたり、どんどんパネルを増やしていくとメモリ消費が激しいのか段々不安定になっていって使い物にならない。
そこで、解決できる拡張パネルとコマンドを作ってしまえば楽になるかも!と思い立ち、模索しながら ただいま絶賛作成中です。
で、いくつかハマったのでリマインド。
1.そもそもデバッグ環境どうしよう?
FLASH IDEの中のパネルを作るという事は、まさかパブリッシュして、FLASH再起動!?と思ってある程度整えてみました。
- windowSWFに直書き出し
WinVistaではC:\Users\[userName]\AppData\Local\Adobe\Flash CS3\ja\Configuration\WindowSWF になります。ここにパブリッシュ設定で書き出し先へ指定。 - キーボードショートカットを登録
windowSWFにあるswfはメニュのウインドウ→他のパネル に現れるのでコレをキーボードショートカットに設定。(僕はctrl+\にしました。)
これでパブリッシュしてショートカットで即プレビュー。
パネルを出したり消したりしてるので、周りのFlasherから不思議な目で見られてました。
2.jsflの関数を呼び出し
どうも、MMExecute()での1行書きだと効率が悪い+物足りない部分が出てきたので、jsflから呼び出すことに。
適当なjsflをどこかに保存して、fl.runScriptで簡単呼び出しができます。
c\temp\とかもいけます。
fl.scriptURI(現在実行中のjsflのパスを返す)というプロパティがあるので、組み合わせておくと余計なことを考えないでよくて便利です。
test.jsfl内に
function jsflFunc(){ return "testMessage!" }
と記述し、
var command:String='fl.runScript(fl.scriptURI , "jsflFunc")'
var mess="JSFL : "+MMExecute(command)
trace(mess)
これでJSFL : testMessage! と出れば成功。
どうやらうまくいったようです。
3.選択したdocument.selectionを保持したい
ヘルプの拡張機能の部分をざっと見たところ、どうやらElementに対してのユニークなプロパティは定義されていないようでした。
InstanceNameが取れるのでそれがユニークなはずだよね?ということなんでしょうか。
一応、fl.findObjectInDocByName(instanceName, document)とElement.setPersistentData、Element.getPersistentDataの組み合わせでなんとかなりそうですが、汚染しちゃうのが厄介。
いい方法を絶賛模索中。引き続きがんばります。