我想要做的是 - 簡單地加載一個外部的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
無法在AS2中構建一個加載AS2 SWF的包裝類並捕獲它的事件並將它們引發至AS3? –
不,因爲沒有由加載的ActionScript 2 SWF調度的事件。 –
爲什麼會發生這種情況? AS3中最頂端的按鈕是如何繼續使事件發生泡沫的,AS2中最頂端的按鈕會捕捉事件並阻止它們傳播? –