擦窗户

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时,鼠标是抬起的,此时不绘制圆形。

原文地址:https://www.cnblogs.com/leon3286/p/1708883.html