- /**
- *鼠标事件
- * @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();
- }