大多数情况下,标题中描述了问题...我试图加载包含一些名为MovieClip实例的外部SWF文件(导出和命名由Flash CS5软件完成)并添加一些外部加载(命名)MovieClip在我的代码中创建的MovieClip对象中的-s。当我将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项目。上面的代码是Example类的主体,它是主要的SWF类。
编辑后编辑: myMovie.mouseChildren = false
解决了这个问题。早些时候我试图设置mouseEnabled = true
,但它没有解决问题。但我现在对事件流感到困惑...即使子节点是目标节点,为什么当父节点仍处于事件流时,父MovieClip上的鼠标侦听器不接收事件(在捕获阶段)?此外,当我在我的代码中创建另一个影片剪辑(内部有一些简单的形状)并将其添加到myMovie时,一切正常。当我从外部加载的SWF获取影片剪辑时有什么特别之处?
答案 0 :(得分:1)
您是否尝试过myMovie.mouseEnabled = true
和myMovie.mouseChildren = false
?