1

Loaderオブジェクトにロードする外部 SWFがあります。

この Loader オブジェクトを子として MovieClip に追加し、この MovieClip を自分のステージに追加します。

Loader オブジェクトの上に透明な長方形のスプライトを描画したいと思います。これは、マウス イベントをキャッチするために必要です。

(マウスがいつ透明レイヤーからロールオーバーしてロールアウトしたかを知る必要があります)。

.

自問自答している場合-ローダー自体でイベントをキャッチするだけでなく、なぜこの透明なレイヤーが必要なのですか? これには多くの理由があります。そのほとんどはクライアントの要求に関係していますが、外部からロードされた SWF が何らかの理由でマウス イベントに応答しないため、「だます」必要があります。独自の透明レイヤーを上に追加します。

私の問題は、ローダーを保持する MovieClip の子として透明レイヤーを配置すると、次の階層が得られることです。 ここに画像の説明を入力

問題は、マウス イベントが最上位レイヤー (透過レイヤー) によってキャッチされ、ムービークリップとステージに渡されることです。イベントは Loader オブジェクトで起動されないため、SWF は非インタラクティブになります。

.

他の解決策は-

次のように、何らかの方法で透明レイヤーを Loader オブジェクトの子として追加します。 ここに画像の説明を入力

その後、イベントはローダーと SWF にバブリングされます。問題は、Loader クラスに子要素を追加できないことです (ロードされた SWF を除く)。

では、SWF の上に透明なレイヤーを追加し、透明なレイヤーと SWF レイヤーの両方でマウス操作を行う方法についてアドバイスをいただけますか?

4

1 に答える 1

2

透過レイヤーは、ロードされたswfファイルのイベントをブロックしています。このレイヤーには、mouseEnabledプロパティtoを使用する必要があります。false

これがあなたのために働くかどうかはわかりませんが、これは役に立つかもしれないと思います。メインのswfに次のコードを追加します。

import flash.display.Loader;
import flash.events.Event;
import flash.events.MouseEvent;
import fl.transitions.Tween;
import fl.motion.easing.Linear;

// Disables the mouse interations
transparentLayer.mouseEnabled = false;
// Initialize with alpha 0
transparentLayer.alpha = 0;

// Cretes the loader
var loader:Loader = new Loader();
// Listen the complete event
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
// Loads the external swf files
loader.load(new URLRequest("swf.swf"));
// Add in the background
addChildAt(loader, 0);

// Listen the complete event
function loadComplete (event:Event) {
    // Add the mouse events to the loaded content
    loader.contentLoaderInfo.content.addEventListener(MouseEvent.ROLL_OVER, mouseHandler);
    loader.contentLoaderInfo.content.addEventListener(MouseEvent.ROLL_OUT, mouseHandler);
}

// Handles de mouse events of the loaded swf
function mouseHandler (event:MouseEvent)
{
    switch (event.type) 
    {
        case MouseEvent.ROLL_OVER :
            // Shows the transparentLayer from the current alpha value to 1 in 1 second
            new Tween(transparentLayer, "alpha", Linear.easeNone, transparentLayer.alpha, 1, 1, true);
        break;
        case MouseEvent.ROLL_OUT :
            // Shows the transparentLayer from the current alpha value to 0 in 1 second
            new Tween(transparentLayer, "alpha", Linear.easeNone, transparentLayer.alpha, 0, 1, true);
        break;
    }
}

透明なレイヤーはすべての相互作用を失ったため、モーションエフェクトを外部から適用する必要があります。ここでは、 http://cl.ly/LtfAを実行しているプロジェクトをダウンロードできます。

于 2013-01-02T14:58:31.687 に答える