AS2父MC事件会屏蔽掉子MC的事件

By:flashcoder Date:2009-04-25

  今天写程序的时候碰到一个问题,对一个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:

as1

 2 a.onRelease = function()
3 {
4 trace(this);
5 };
6 //当上面code注释后,b执行onRollOver,onRollOut
7 a.b.onRollOver = function()
8 {
9 this._alpha = 30;
10 };
11
12 a.b.onRollOut = function()
13 {
14 this._alpha = 80;
15 };


 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;
}
参与讨论去: 艾睿(Airia) 交朋友去:友吧推荐文章去:网站贴吧
企业招聘

北京中视力天文化传媒有限公司

公司简介:北京中视力天文化传媒有限公司,是CCTV.com央视国际网络有限公司投资的互联网研发团队。我们是天使的使者。。。

招聘FlashAS程序员详情点击

Copyright 2007-2008 51AS.com Extended in kingcms 鲁ICP备06001158号