0

私がやろうとしているのは、外部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への リンク

4

1 に答える 1

0

ActionScript 2は別の仮想マシンで実行され、ActionScript 3とは互換性がありません。2つのSWF間の通信は簡単ではなく、ローカル接続でのみ機能します。また、ActionScript 2にはイベントシステムがないため、これが2番目の部分になります。

->期待どおりに動作しません。

于 2013-01-02T14:33:31.900 に答える