想象一个绘画程序。 我有两个相互重叠的图像。 如果单击上面的透明部分,则必须能够单击后面的图像。

我在每个图像上添加一个事件侦听器。 因此,我必须阻止第一个调度click事件,以防止后面的调度事件。

(我的意思是,我已经检查了透明像素,但是我不能取消该事件给其他分配它的图像。)

#1楼 票数:1 已采纳

有一些肮脏的解决方案。 假设您的“图像”封装在Sprites中,否则您无法将侦听器附加到Bitmap对象或Shape对象。 MovieClips-好吧,尽管检查Alpha难度要大得多,但它仍然应该可以正常工作。 您的听众已附加到这些精灵上。 首先,该精灵本身可以检查透明度,如果不透明,则继续进行该事件。 要获取后面的内容,可以调用stage.getObjectsUnderPoint() ,这将返回一个DisplayObjects数组,前景在最上面。 因此,您可能只有一个侦听器可以调用此方法来枚举要点,然后按照Roman Trofimov的建议确定对象的透明度。 找到不透明的对象后,您可以执行以下操作:

// "b" is a non-transparent DisplayObject found beforehand
while (b && (!(b is InteractiveObject))) b = b.parent;
if (b) {
    var p:Point = new Point(e.stageX, e.stageY);
    p = b.globalToLocal(p);
    b.dispatchEvent(new MouseEvent('click', true, true, p.x, p.y)); 
}

这会将click事件调度到能够接收事件的对象,并且它不透明,足以遮盖背景。

#2楼 票数:0

MovieClip属性“ mouseEnabled”可以防止在其他对象前面的对象上触发单击事件,例如,拍摄两个相同大小和相同位置的影片剪辑:

mc1.addEventListener(MouseEvent.CLICK, click1);
function click1(e:MouseEvent) : void
{
  trace("1");
}

mc2.addEventListener(MouseEvent.CLICK, click2);
function click2(e:MouseEvent) : void
{
  trace("2");
}

mc1.mouseEnabled = false;

由于点击实际上会“通过” mc1,因此输出将为“ 2”。

#3楼 票数:0

在flex中,您可以向组件添加mouseEnabledWhereTransparent =“ false”。 虽然不确定是否可以使用该变量

#4楼 票数:0

通常,您总是会从第一个精灵获得第一个事件(如果不是捕获阶段或优先级更改)。 但是据我了解,您需要检查它是否透明,如果不透明,请停止冒泡此事件。

要停止事件-在事件处理程序中使用event.stopImmediatePropagation()

要确定透明度:

1)如果只是一个位图,则可以使用.bitmapData方法检查其.getPixel32 ,它返回您的alpha值。

2)如果它是组合的精灵(矢量和位图),则需要使用BitmapData.draw手动将其渲染为Bitmap,然后使用第二种情况的解决方案

3)要了解它是否绝对是单击遗漏,可以尝试以下方法: 检查透明度

  ask by Fabricio translate from so

未解决问题?本站智能推荐:

1回复

具有透明背景的Flex单选按钮外观,允许鼠标单击

我敢肯定这很简单,但我看不到。 我为RadioButton创建了一个外观,该外观本质上是一个正方形组,其中包含一个三角形。 三角形的尖端位于正方形的中心。 所有艺术品都是矢量路径,并在MXML中定义。 当我在用户界面中放置RadioButton时,它们会相互重叠,尽管可见的三角形不会
1回复

FlexBitmapimage图形鼠标单击错误

我添加了一个BitmapImage作为Graphic元素: 现在,在BitmapImage左侧或顶部的Mouse Click事件上, event.target将g作为目标而不是画布。 当我不单击BitmapImage时,为什么event.target指向g ?
1回复

如何检查鼠标单击是否在元素内

click事件用于父元素时,检查子元素内是否单击鼠标的代码是什么。 仅当单击位于子元素内时,我才需要区分执行某些任务。 Flex中会发生哪种传播? 我对此有些陌生。 我有一个带有视频显示和视频控制栏的视频播放器。 我注册了占用全屏的视频播放器的点击事件。 单击时,控制栏应进行切换(
2回复

FlexHTMLLoader组件不会为所有鼠标单击引发mouseDown事件

我已经使用Flash Builder 4构建了Air 2 / Flex 4信息亭应用程序。目前,我正在实现触摸屏浏览器,以使用户能够浏览公司培训视频。 为了提高网站在触摸屏上的可用性,我将HTML组件放置在Doug McCune的DragScrollingCanvas (已更新为使用flex
1回复

如何使用FlexSpark滑块防止用户鼠标单击交互?

我使用Flex Spark Slider作为我创建的Flex视频播放器自定义组件的时间线。 我想阻止用户单击滑块并更改其值,但同时我应该能够以编程方式更改滑块的值。 将滑块的“enabled”属性设置为“false”没有帮助,因为我无法以编程方式更改滑块值。 有任何线索,如何实现这种
5回复

是否可以使用鼠标向下和向上事件来模拟鼠标单击?

上一个问题使我开始思考。 是否可以通过仅先触发MOUSE_DOWN然后触发MOUSE_UP来模拟MouseEvent.CLICK来触发。 按照Adobe的说法。 “ ...为了使click事件发生,它必须始终按照发生的顺序跟随这一系列事件:mouseDown事件,然后是mouseUp。这
1回复

鼠标单击时调用相同的事件处理程序,然后按输入键

我们可以使用同一个事件处理程序来监听鼠标单击事件和按下Enter键时调度的事件吗? 谢谢。
1回复

如何在Flex4位图图像控件上找到鼠标单击事件

如何在Flex 4中的位图图像控件上处理鼠标单击事件? 我看到没有像这样的事件处理程序用于位图图像控制。 谢谢