0

我有电影剪辑(其中又包含超过 1 个电影剪辑)。我的要求是将MouseEvent.CLICK事件添加到父影片剪辑。因此,MouseEvent.CLICK仅当单击了视觉上不透明(alpha = 100 %)的区域时,flash 才会调度事件(),否则,忽略。

我现在做的解决方法是创建一个alpha = 0.05跟随鼠标光标的圆圈,Event.ENTER_FRAME然后做一个命中测试,然后是一个PixelPerfectCollisionDetection(礼貌的一个我在谷歌代码上钦佩的 gr8 人:))

简而言之,我需要知道我是否可以仅在单击动画剪辑的视觉不透明区域时才可以使 flash 调度 MouseEvent 而不是 anywhere in the bounding box region.

谢谢,

毗湿奴阿吉特

4

1 回答 1

2

我得到了这个解决方案。但它一点也不完美,因为您每次都创建一个新bitmapData对象MovieClip

myButton.addEventListener( MouseEvent.CLICK, clickFunction);

private function clickFunction(e:MouseEvent) {
    if(pixelIsVisible(e.currentTarget, e.currentTarget.mouseX, e.currentTarget.mouseY)) {
        //DoSomething
    }
}   

private function pixelIsVisible(target:*, xPos:int, yPos:int):Boolean {
    var bmp:BitmapData = new BitmapData( target.width, target.height, false );
    bmp.draw( target as MovieClip );
    var pixelValue = bmp.getPixel( xPos, yPos);

    //Dispose bitmapData to free memory
    bmp.dispose();

    var alphaValue:uint = pixelValue >> 24 & 0xFF;
    //alphaValue is from 0 to 255
    if(alphaValue >= 255) return true;
    else false;
}
于 2012-06-22T08:43:02.000 回答