AS3:向加载的AS2 SWF添加事件侦听器

时间:2013-01-02 10:39:45

标签: actionscript-3 mouseevent actionscript-2

我要做的是 - 只需将外部SWF加载到我的AS3代码中。

然后我想表明它在我的舞台 - 并能够赶上“ROLL_OVER”,“ROLL_OUT”以及与SWF发生“MOUSE_CLICK”事件,这意味着 - 我想知道,当用户将鼠标悬停在加载SWF和他点击它时。

如果我加载外部 AS3 SWF - 一切正常,我可以成功跟踪事件。

如果我加载外部 AS2 SWF - 在某些类型的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中以某种方式被“吞没”而不会冒泡。

如果我尝试加载一个透明按钮作为顶层的AS3 SWF - 它可以工作,并且仍然将鼠标事件冒泡到我的AS3代码。

有谁能告诉我为什么会这样?

PS - 如果我加载一个没有透明按钮作为顶层的AS2 SWF - 而不是鼠标事件冒泡到我的AS3代码。

这是指向AS2 SWF文件的链接,该文件具有“透明按钮”,可阻止事件冒泡到AS3代码: link to AS2 SWF

1 个答案:

答案 0 :(得分:0)

ActionScript 2在不同的虚拟机中运行,与ActionScript 3不兼容。两个SWF之间的通信甚至不容易,但仅适用于本地连接。 ActionScript 2也没有事件系统,因此这将是第二部分。

- >它不能像你期望的那样工作。