今天写程序的时候碰到一个问题,对一个mc设置onRollOver和onRollOut事件,运行后去没有任何反应.
于是debug,用trace(mc.onRollOver);也有[type Function]的输出..搞了好大会儿.于是单独测试,发现在mc的父级设置了onRelease事件,
注释掉相关code,测试一切正常.
结论:当对父影片剪辑设置了鼠标事件后,子影片剪辑的事件就会被屏蔽掉。所以当既要在一个实现影片剪辑A中影片剪辑B的onRollOver事件,有要实现整个A的onRelease事件时,通常是在A中再创建一个背景影片C来实现.
想到as3,翻到以前翻译的一点东西,看来as3中不用为这个问题担心了。
AS3支持事件的传递,事件传递指的就是在对于嵌套对象中的每一个对象都能触发事件,而不只是一个事件引用
如果两个角色重叠,你点击了上面的角色,则只能获得从上面角色发送来的消息,即使你的点击碰巧发生在两个角色交叠的范围之内。
在AS1/AS2中,影片剪辑的类似”按钮”事件(如onPress,onRelease等等)不能被传递给它们的子剪辑的.这意味着虽然表面上你单击了影片剪辑的子剪辑,希望这个子剪辑来处理onPress事件,但是实际上onPress事件是由父剪辑来处理的,因为它阻隔了onPress事件传递给子剪辑.
测试code:
as3:
1 a.addEventListener(MouseEvent.CLICK,onReleaseHandler);
2 a.b.addEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);
3 a.b.addEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);
4 function onReleaseHandler(evt:Object):void {
5 trace(evt.target);
6 }
7 function onMouseOverHandler(evt:Object):void {
8 evt.target.alpha = .3;
9 }
10 function onMouseOutHandler(evt:Object):void {
11 evt.target.alpha =.9;
12 }
a.addEventListener(MouseEvent.CLICK,onReleaseHandler);
a.b.addEventListener(MouseEvent.MOUSE_OVER,onMouseOverHandler);
a.b.addEventListener(MouseEvent.MOUSE_OUT,onMouseOutHandler);
function onReleaseHandler(evt:Object):void {
trace(evt.target);
}
function onMouseOverHandler(evt:Object):void {
evt.target.alpha = .3;
}
function onMouseOutHandler(evt:Object):void {
evt.target.alpha =.9;
}Copyright 2007-2008 51AS.com Extended in kingcms 鲁ICP备06001158号