打印

[AS3] 鼠标能点击被遮挡的MC[已解决]

假如有两个MC,一个叫A,一个叫B
A放在B的上面,也就是说A可以遮住B,而且现在A把B完全遮挡了
B上有MouseEvent.CLICK事件的监听
现在我点击A,B上面还是会收到MouseEvent.CLICK消息。
真奇怪,我不是用A把B挡住了吗?怎么还可以点击B
挡住了还是可以点?郁闷
可以解决吗?还是adobe真的是这样设计的?

[ 本帖最后由 99love 于 2008-5-5 14:52 编辑 ]
AS3不能哦,AS2才能。
目前我是这样认为的。
http://www.flash023.cn 终极讨厌
as3 有事件冒泡. 靠遮盖的办法貌似不行了.
复制内容到剪贴板
代码:
this.addChild(createRectMovieClip(50, 50, 0x112233, {x:50, y:50, name:'HandsomeMonkeyKing'}, 1.0)).addEventListener(MouseEvent.CLICK, mouseEvent);
this.addChild(createRectMovieClip(90, 90, 0x778899, {x:30, y:30, name:'FiveFingerMountain'}, 0.9)).addEventListener(MouseEvent.CLICK, mouseEvent);

function mouseEvent (event:MouseEvent):void
{
    trace(event.target.name);  //  return FiveFingerMountain
}


function createRectMovieClip ($width:Number = 0, $height:Number = 0, $color:uint = 0xFFFFFF, $init:Object = null, $alpha:Number = 1, $lineAlpha:Number = 0, $thickness:Number = 0, $lineColor:Number = 0):MovieClip
{
    var MC:MovieClip = new MovieClip();
        MC.graphics.lineStyle($thickness, $lineColor, $lineAlpha);
        MC.graphics.beginFill($color, $alpha);
        MC.graphics.drawRect(0, 0, $width, $height);
   
    for (var i:String in $init) MC[i] = $init[i];
   
    return MC;
}

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!
to mirycat:
事件冒泡应该是从child到parent,从树叶向树根方向吧?
两个兄弟节点只是层级不同(一个遮挡另一个,我不知道是不是叫层级)也能冒泡?

TOP

既然可以根据鼠标坐标来获得显示对象的引用,那么用遮盖的方法来屏蔽下层显示对象的鼠标响应看起来就不现实吧。你可以根据显示对象的index来确定该显示对象是否可以接受鼠标事件

TOP

to Poshidon:
因为这个对象非常的大,大的整个舞台都装不下,
也就是说,当这个对象在舞台上的时候,整个舞台都是它
但是,这又不能显示在整个舞台上,所以,我用了一部分其它东西来遮挡它
视线是挡住了,但是鼠标点击挡不住

这个对象就是要接受鼠标事件的,如果该对象不接受鼠标事件,有些操作我就无法完成。。。

TOP

回复 99love 在 7# 的帖子

4楼的结果有问题?

TOP

引用:
原帖由 abc12hjc 于 2008-5-5 13:45 发表
4楼的结果有问题?
大虾的示例已经很清除了!我也不知道为什么有的朋友不认真听取别人的发言。
要提问,却又不认真听取。
http://www.flash023.cn 终极讨厌

TOP

创建一个SimpleButton...改变enabled为false..就行了!!!

TOP

回复 abc12hjc 在 8# 的帖子

不好意思
我以为是2.0的AS
因为除3.0以外的我看不懂,我运行一下。


[ 本帖最后由 99love 于 2008-5-5 14:36 编辑 ]

TOP

回复 99love 在 7# 的帖子

干脆你这样吧,在鼠标事件处理函数中写:
if(e.target.name == 巨大对象.name){//}
也可以switch...
这样可以根据事件对象的不同进行不同的处理了。
其实我到觉得被遮住的显示对象能够接受鼠标事件是一件好事情。

TOP

呀呀,回头看了看4楼的,我和4楼的弟兄说的差不多.....各位弟兄,答问题的时候将精髓的部分写出来就可以了,我觉得大家需要的是解决问题的渔,而不是粘贴复制过来就可以用的鱼。

TOP

首先谢谢各位
结论是上面的MC可以遮挡住下方MC的点击,无论上层的MC是否有listener
abc12hjc 在4#的例子很标准,要是有提示性的语句就更好了
Poshidon也对,并且很热心,感谢。

TOP

引用:
原帖由 Poshidon 于 2008-5-5 14:39 发表
呀呀,回头看了看4楼的,我和4楼的弟兄说的差不多.....各位弟兄,答问题的时候将精髓的部分写出来就可以了,我觉得大家需要的是解决问题的渔,而不是粘贴复制过来就可以用的鱼。
是渔非鱼,得者自知

TOP

好吧,既然破了例,索性就多写一点

二楼搞反了
三楼答偏了
五楼纠正了三楼

就这么多。

[ 本帖最后由 abc12hjc 于 2008-5-5 15:27 编辑 ]

TOP

引用:
原帖由 abc12hjc 于 2008-5-5 15:26 发表
好吧,既然破了例,索性就多写一点

二楼搞反了
我没搞反 我的意思是AS3可以盖得住,AS2盖不住 (AS2,要盖住,需要在上层MC添加一个空的鼠标事件)


楼主说的是“现在我点击A,B上面还是会收到MouseEvent.CLICK消息。真奇怪,我不是用A把B挡住了吗?怎么还可以点击B”
我回答,AS3不能(我的意思是不能点击到B),AS2才能。

[ 本帖最后由 flash023 于 2008-5-5 15:35 编辑 ]
http://www.flash023.cn 终极讨厌

TOP

能不能写简单一点啊?看都看不懂。

TOP

4#的程序有个性,赞个~

TOP