2013-01-02 106 views
0

我想要做的是 - 簡單地加載一個外部的SWF到我的AS3代碼。AS3:添加事件監聽器到加載的AS2 SWF

然後我想在舞臺上展示它 - 並且能夠捕獲SWF發生的'ROLL_OVER','ROLL_OUT'和'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

回答

0

ActionScript 2點中運行,並且不兼容使用ActionScript 3.兩個SWF之間的通信並非易事,但僅適用於本地連接。 ActionScript 2也沒有事件系統,因此這將是第二部分的照顧。

- >它不能按照您的預期工作。

+0

無法在AS2中構建一個加載AS2 SWF的包裝類並捕獲它的事件並將它們引發至AS3? –

+0

不,因爲沒有由加載的ActionScript 2 SWF調度的事件。 –

+0

爲什麼會發生這種情況? AS3中最頂端的按鈕是如何繼續使事件發生泡沫的,AS2中最頂端的按鈕會捕捉事件並阻止它們傳播? –