[转] 判断鼠标点击图片在非透明区域


/**
*鼠标事件
* @param evt
*
*/

private function mouseDownHandler(evt:MouseEvent):void
{
if(evt.currentTarget is SceneObject)
{
//判断当前点击区是否在最小图形范围内

var bmd:BitmapData = new BitmapData(evt.currentTarget.width,evt.currentTarget.height,true, 0x00000000);
bmd.draw(evt.currentTarget as SceneObject);

//第一种方法:找到对象的非空白区域,判断鼠标点击点是否在该区域内

///看帮助 若要确定图像周围的空白区域,请传递 {mask: 0xFFFFFFFF, color: 0xFFFFFFFF} 以查找非空白像素的范围。如果new BitmapData时填充了 0x00000000则传递{mask: 0xFFFFFFFF, color: 0x00000000}
/*var rect:Rectangle = bmd.getColorBoundsRect(0xffffffff,0x00000000,false);
trace(rect);
var minx:Number = rect.x;
var miny:Number = rect.y;
var maxx:Number = minx + rect.width;
var maxy:Number = miny + rect.height;
*/

//第二种方法 取当前点击点的颜色值 与0x0000000进行判断如果相等则非空白 ,
/*var color:uint = bmd.getPixel32(evt.localX,evt.localY);
trace(color.toString(16),0x00000000); //此处 的color值在点击透明区域输出0xffffffff
*/

//第三种方法 利用像素碰撞函数hitTest一步解决 0x00000001 为取比0x00000000都大的区域都为非透明像素
var ptoint = new Point(evt.localX,evt.localY);
if(bmd.hitTest(new Point(0,0),0x00000001,pt))
//if(evt.localX>= minx && evt.localX <= maxx && evt.localY >= miny && evt.localY <= maxy)
//if(color != 0x00000000)
{
trace("按下,在内部");
bmd.dispose();
}
else
{
trace("按下,不在内部");
bmd.dispose();
return;//返回不停止事件流,让鼠标托动背景
} }
evt.stopPropagation();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值