AS3からAS2の外部swfを読みこんでEventを取得したい
他の人が作ったflashを組み合わせたときのMemo.
環境はAdobe Flash Professional CS5, Action Script 3.0
まず外部swf fileを読み込むのはLoader を使えば簡単。下記を参考に。
flash.display.Loader (ActionScript 3.0)
ActionScript3.0 勉強部屋 外部swfファイルの読み込みと制御
ハマったのはここから。やりたいのは
AS2のswfのbuttonをclickしたら、そのEventを親swfでcatchして処理をしたい(できるだけ他の人が作ったAS2 SWFは触りたくない)。
基本的にAS2のswf(AVM1 SWF)とAS3のswf(AVM2 SWF)はやり取りできないらしい。Reference Guide。
試したこと
- 親swfで透明なbuttonを設置する。
→ 子swfのmouse overのEventが発生しなくなる - Loaderで読み込む際にAVM1をAVM2に変換するForcibleLoaderを試す。こちら。
→ 読み込んだ子swfの動きが変になる - stage.addEventListener(MouseEvent.CLICK, func);
loader.addEventListener(MouseEvent.CLICK, func);
という感じで、Click Eventを全て取得して、座標で判断。
→ 子swfのbutton上ではClick Eventが発生しない。
結論、LocalConnectionを使わないと実現できない = 子swfを改修しないといけない。
LocalConnectionの使い方は下記Blogを参考に。
ActionScript3.0 LocalConnectionで2つのSwfを連携させたい。 - 雨と風と快晴と 2.0
ちゃんと「おもじない」をしないと動作しなかった。
さらに途中で強制終了すると、次起動したときに下記Errorが出力されて止まる。
Connect failed because the object is already connected.
これはconnect()をtry catch文で囲んで回避するみたい。
< Related Posts >