1

我有一个加载到Loader对象中的外部 SWF 。

我将此 Loader 对象作为子对象添加到 MovieClip 并将此 MovieClip 添加到我的舞台。

我现在想在 Loader 对象的顶部绘制一个透明的矩形 Sprite,这只是捕获鼠标事件所需要的。

(我需要知道鼠标何时滚动并滚出透明层)。

.

如果你问自己——为什么我需要这个透明层而不是仅仅捕捉加载器本身的事件?好吧,这有很多原因,其中大多数与客户端请求有关,而且 - 因为某些外部加载的 SWF 由于某种原因不响应鼠标事件 - 所以我需要“欺骗”它并在上面添加我自己的透明层。

我的问题是 - 如果我将透明层作为包含加载器的 MovieClip 的子层,那么我会得到这个层次结构: 在此处输入图像描述

问题是 - 鼠标事件被最顶层(透明层)捕获并传递到 MovieClip 和舞台。事件不会在 Loader 对象中触发,因此 - SWF 变为非交互式。

.

另一个解决方案是 -

以某种方式将透明层添加为 Loader 对象的子对象,如下所示: 在此处输入图像描述

然后事件将被冒泡到加载器和 SWF。问题是 - Loader 类不允许您向其添加子元素(加载的 SWF 除外)。

那么任何人都可以提供建议我如何在 SWF 之上添加一个透明层并且仍然与透明层和 SWF 层进行鼠标交互吗?

4

1 回答 1

2

透明层正在阻止加载的 swf 文件的事件。您需要为此图层使用mouseEnabled属性。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 回答