AS3 - 如何使用鼠标事件而不是对象检测来使用像素/点检测

时间:2015-08-11 21:07:19

标签: actionscript-3

这似乎应该很容易让我感到尴尬,但我无法得到它。

我有一个大圆形MovieClip(用作按钮)。此MovieClip包含插入MovieClip的 PNG,背景为透明。 由于它的大小,在4个角(边界框)上有大的空注册区域。

如何将鼠标注册为仅覆盖圆形像素而不是方形边框中的空白区域(Alpha通道像素)?

简单示例代码:

main

1 个答案:

答案 0 :(得分:3)

以下是实现此目的的3种不同方法。

编辑由于您后来解释说您的按钮是图片,因此第一个选项对您不起作用

  1. 如果file = open('test.txt', 'r') data = file.read() data2 = data.split('\n') 上的形状标记与您的按钮一起使用(例如它的形状),您可以在鼠标单击处理程序中使用<table class="table table-bordered table-condensed"> <thead> <tr class="info"> <th class="col-md-2"><input type="checkbox" class="app-all"/>&nbsp<button type="button" class="btn btn-primary btn-xs">Modify</button></th> <th class="col-md-1 text-center">Comments</th> </tr> </thead> <tbody id="Container" data-filteredresult=""></tbody> </table> 来确定点击是否为实际上是在对象上:

    hitTestPoint
  2. 如果由于您的按钮中有bimtap数据而导致上述操作不起作用,那么实现此目的的一个简单方法就是在按钮上添加一个形状蒙版。

    因此,使用FlasPro在您的按钮内部,用圆形掩盖所有内容,或者在第一次显示按钮时通过执行以下操作来执行此操作:

    hitTestPoint
  3. 如果使用图像作为按钮,或者您想设置考虑点击的透明度阈值,则可以检查鼠标下像素的透明度:

    public function doStuff(event:MouseEvent){
        //only continue if hit test point is true,  
        //the x and y values are global (not relative to the mc your testing as one might suppose)
        //the third parameter should be true, so it takes into account the shape of object and not just it's bounds
        if(mc1.hitTestPoint(stage.mouseX, stage.mouseY, true)){
            mc2.gotoAndStop(2);
        }
    }