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 >

[Flash] Coding Guide(コーディング規約) for ActionScript
初めてのFlash。お役立ちLink集