package { import flash.display.Sprite; import flash.display.Shape; import flash.display.Loader; import flash.net.URLRequest; import flash.display.Bitmap; import flash.filters.BlurFilter; import flash.events.Event; import flash.events.MouseEvent; public class onWindow extends Sprite { private var _pic:Loader; private var bit:Bitmap; private var abc_mask:Sprite; private var boolean:Boolean=false; public function onWindow():void { init(); } private function init():void { _pic=new Loader(); _pic.load(new URLRequest("刘德华_道地茶广告.jpg")); _pic.contentLoaderInfo.addEventListener(Event.COMPLETE,loadok); } private function loadok(evt:Event):void { //为_pic添加模糊滤镜 var lvjing:BlurFilter=new BlurFilter(); lvjing.blurX=5; lvjing.blurY=5; _pic.filters=[lvjing]; addChild(_pic); bit=new Bitmap(evt.target.content.bitmapData); addChild(bit); abc_mask=new Sprite(); bit.mask=abc_mask; addChild(abc_mask); stage.addEventListener(MouseEvent.MOUSE_DOWN,down); stage.addEventListener(MouseEvent.MOUSE_MOVE,mmove); stage.addEventListener(MouseEvent.MOUSE_UP,up); } private function down(evt:MouseEvent):void { boolean=true; } private function up(evt:MouseEvent):void { boolean=false; } private function mmove(evt:MouseEvent):void { if (boolean) { var a:Shape=new Shape(); a.graphics.beginFill(0x00ff00); a.graphics.drawCircle(mouseX,mouseY,20); a.graphics.endFill(); abc_mask.addChild(a); } } } }
第23-29行:为_pic添加模糊滤镜,使得_pic图片实现模糊效果。
第31-32行:复制一个和_pic一样的bit图片,此时bit和上面被模糊过滤的_pic是重合的,因为bit后面才添加到舞台,因此只能看见bit,_pic被挡在图层下层,看不见。
第33-35行:定义一个空白的遮罩,挡住清晰的bit,这样模糊的_pic就显示出来了。(注意:如果不复制得到bit,对它使用遮罩,而直接对模糊的_pic使用遮罩,那么此时图片只有2张:_pic和bit_mask,并且bit_mask会挡住_pic,此时显示空白图像。)
第37-53行:到了这里,舞台上显示的就是模糊的_pic。我们的目的是要当鼠标按下并且在舞台上移动的时候,产生擦窗户效果,这时可以设置鼠标移动时绘制圆形对象,并将它添加到遮罩层bit_mask上,这样圆形对象就产生了遮罩效果。因为当鼠标在舞台移动但不按下的时候,不希望产生遮罩,因此定义3个鼠标事件:MOUSE_DOWN、MOUSE_UP、MOUSE_MOVE,并且设定判断绘制圆形的判断条件boolean=true,此时即鼠标按下了;而当boolean=false时,鼠标是抬起的,此时不绘制圆形。