大多数情况下,标题中描述了问题......我试图加载一个包含一些命名MovieClip实例的外部SWF文件(导出和命名由Flash CS5软件完成)并添加一些外部加载(命名)MovieClip-s在我的代码中创建的 MovieClip 对象。当我将 MOUSE_CLICK 侦听器添加到父 MovieClip 时出现问题。简单地说,当我在舞台上单击它时它不会调度事件......
private var loader:Loader;
public function Example(){
loader = new Loader();
var request:URLRequest = ... // URL to external SWF
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingCompleted)
loader.load(request);
}
private function loadingCompleted(event:Event):void{
var mc:MovieClip = loader.content as MovieClip;
var myMovie:MovieClip = new MovieClip();
myMovie.addChild(mc.getChildByName("object_name"));
myMovie.addEventListener(MouseEvent.CLICK, myMovieClicked);
addChild(myMovie); // myMovie (with nested mc) appears on the stage
}
private function myMovieClicked(evt:Event):void{
//never reached
}
编辑:我没有提到我正在使用 FlashBuilder 4.5 在 Flex 中工作,我在其中创建了 ActionScript 项目。上面的代码是示例类的主体,它是主要的 SWF 类。
回答后编辑: myMovie.mouseChildren = false
解决问题。早些时候我尝试设置mouseEnabled = true
,它并没有解决问题。但是我现在对事件流感到困惑......即使子节点是目标节点,为什么当父节点仍在事件流上时父 MovieClip 上的鼠标侦听器没有收到事件(在捕获阶段)?此外,当我在我的代码中创建另一个电影剪辑(内部有一些简单的形状)并将其添加到 myMovie 时,一切正常。当我从外部加载的 SWF 获取影片剪辑时,有什么特别之处?