鼠标点击波纹效果
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.geom.Matrix;
import flash.filters.ConvolutionFilter;
import flash.geom.ColorTransform;
import flash.filters.DisplacementMapFilter;
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.events.MouseEvent;
import flash.events.Event;
stage.frameRate=30;
//定义影片的刷新频率
var pwidth:Number=550;
var pheight:Number=400;
//定义影片的宽和高
var bgimg:Bgimg=new Bgimg();//Bgimg是舞台中元件的类名
//创建背景图像类的实例
Var appearance:BitmapData=new BitmapData(pwidth,pheight,true);
//创建位图数据用于绘制水的表面
var ores:BitmapData=new BitmapData(pwidth,pheight,false,128);
//创建位图数据用于绘制第一层波纹
var ores2:BitmapData=new BitmapData(pwidth*2,pheight*2,false,128);
//创建位图数据用于绘制第二层波纹
var psour:BitmapData=new BitmapData(pwidth,pheight,false,128);
//创建位图数据用于载入背景图像
var lbuff:BitmapData=new BitmapData(pwidth,pheight,false,128);
//创建位图数据用于实现缓冲
var poutp:BitmapData=new BitmapData(pwidth*2,pheight*2,true,128);
//创建位图数据用于实现输出波纹
var waveRect:Rectangle=new Rectangle(0,0,pwidth,pheight);
//创建波纹荡漾的矩形边界用于反弹波纹
var spoint:Point=new Point();
//创建鼠标单击波纹的起点
var tranmatr:Matrix=new Matrix();
//创建转换矩阵的起点
var tranmatr2:Matrix=new Matrix();
//创建转换矩阵的终点
tranmatr2.a=tranmatr2.d=2;
//将载入的图像映射到输出的转换矩阵中
Var wave:ConvolutionFilter=new ConvolutionFilter(3,3,[1,1,1,1,1,1,1,1,1],9,0);
//创建卷积滤镜对象
//var trans:ColorTransform=new ColorTransform(0,0,9.960937E-001,1,0,0,2,0);
var trans:ColorTransform=new ColorTransform(0,0,0.996,1,0,0,2,0);
//创建颜色转换对象
var water:DisplacementMapFilter=new DisplacementMapFilter(ores2,spoint,4,4,96,96,"ignore");
//创建位图置换对象
var leftpress:Boolean=false;
//判断鼠标左键是否被按下
var bg:Sprite=new Sprite();
//创建背景的构造显示对象
this.addChild(bg);
//定义构造显示对象显示于影片中
bg.graphics.beginFill(0xFFFFFF,0);
//在构造显示对象中开始填充色块,定义色块颜色
bg.graphics.drawRect(0,0,pwidth,pheight);
//在构造显示对象中填充矩形
bg.graphics.endFill();
//结束填充
this.addChild(new Bitmap(poutp));
//输出填充的位图
function loadpic():void{
appearance.draw(bgimg,null,null,null,null,true);
//在表面位图中绘制导入的对象
this.addEventListener(MouseEvent.MOUSE_DOWN,mousedown);
this.addEventListener(MouseEvent.MOUSE_UP,mouseup);
this.addEventListener(Event.ENTER_FRAME,movieframe);
}
function mousedown(e:MouseEvent):void{
leftpress=true;
//判断,鼠标按下为真
}
function mouseup(e:MouseEvent):void{
leftpress=false;
//判断鼠标按下为假
}
function movieframe(e:Event):void{
if(leftpress){
var xx:Number=this.mouseX/2;
var yy:Number=this.mouseY/2;
psour.setPixel(xx+1,yy,16777215);
psour.setPixel(xx-1,yy,16777215);
psour.setPixel(xx,yy+1,16777215);
psour.setPixel(xx,yy-1,16777215);
psour.setPixel(xx,yy,16777215);
//设置单个像素的位置和颜色
}
ores.applyFilter(psour,waveRect,spoint,wave);
//对ores对象应用卷积滤镜
ores.draw(ores,tranmatr,null,BlendMode.ADD);
//在ores对象上绘制ores对象
ores.draw(lbuff,tranmatr,null,BlendMode.DIFFERENCE);
//在ores对象上绘制lbuff对象
ores.draw(ores,tranmatr,trans);
//在ores对象上绘制ores对象
ores2.draw(ores,tranmatr2,null,null,null,true);
//在ores2对象上绘制ores对象
poutp.applyFilter(appearance,new Rectangle(0,0,pwidth*2,pheight*2),spoint,water);
//为poutp对象应用卷积滤镜
lbuff=psour;
psour=ores.clone();
//创建psour对象的副本
}
loadpic();