我要做的是 - 只需将外部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
答案 0 :(得分:0)
ActionScript 2在不同的虚拟机中运行,与ActionScript 3不兼容。两个SWF之间的通信甚至不容易,但仅适用于本地连接。 ActionScript 2也没有事件系统,因此这将是第二部分。
- >它不能像你期望的那样工作。