私がやろうとしているのは、外部SWFをAS3コードにロードするだけです。
次に、それをステージに表示し、SWFで発生する「ROLL_OVER」、「ROLL_OUT」、および「MOUSE_CLICK」イベントをキャッチできるようにします。つまり、ユーザーがロードされたSWFにカーソルを合わせたときと、彼はそれをクリックします。
外部AS3SWFをロードすると、すべて正常に動作し、イベントを正常にトレースできます。
外部AS2SWFをロードすると(一部のタイプのAS2バナーではイベントをキャッチできますが、一部ではキャッチできません)。
ロードされたSWFを制御することはできず、別の方法でコーディングすることもできないことに注意することが重要です。
外部SWFをロードする方法は次のとおりです。
。
var loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onLoaded);
loader.load(new URLRequest(externalSwfURL));
function onLoaded(evt:Event):void
{
// The reason I don't create the MovieClip like this is because I need to support
// both AS2 and AS3 that will be loaded, and loaded AS2 cannot be casted to 'MovieClip'
//var mc:MovieClip = MovieClip(evt.target.content);
// This method allows me to load both external AS2 and AS3 SWF files
var mc:MovieClip = new MovieClip();
mc.addChild(loader);
// Add the events that I want to track
mc.addEventListener(MouseEvent.ROLL_OVER , onMouseEnterSWF);
mc.addEventListener(MouseEvent.ROLL_OUT , onMouseLeaveSWF);
mc.addEventListener(MouseEvent.CLICK , onMouseClickSWF);
mc.x = 100;
mc.y = 100;
stage.addChild(mc);
}
。
私が見つけたのは、ロードされたAS2 SWFの上部に透明なボタンがある場合(それらの多くには透明なボタンがあります)、マウスイベントは私のAS3コードに戻されません!それらは、ロードされたAS2 SWF内に何らかの形で「飲み込まれ」、泡立ちません。
最上位レイヤーとして透明なボタンを持つAS3SWFをロードしようとすると、それは機能しますが、それでもマウスイベントをAS3コードにバブルします。
なぜこれが起こるのか誰か教えてもらえますか?
PS-最上位レイヤーとして透明なボタンがないAS2SWFをロードすると、マウスイベントがAS3コードにバブルアップされます。
これは、イベントがAS3コードまでバブリングするのをブロックする「透明なボタン」を持つAS2SWFファイルへのリンクです。AS2SWFへの リンク