Flash AS3实例教程:漂亮的水纹动画

7次阅读

  详细代码:

var k:Number=0;// 声明一个数值型变量 k,初始值为 0

var mc:MovieClip =new Mc();// 声明一个影片剪辑类实例 mc,链接库中类名为 Mc 的影片剪辑

addChild(mc);// 把 mc 添加到显示列表

var bt1:BitmapData=new BitmapData(275,200,false,0x0);// 声明一个位图数据类实例 bt1(宽 275,高 200, 不支持透明度,黑色)

var bt2:BitmapData=new BitmapData(275,200,false,0x0);// 声明一个位图数据类实例 bt2(宽 275,高 200, 不支持透明度,黑色)

var bt3:BitmapData=new BitmapData(550,400);// 声明一个位图数据类实例 bt3(宽 550, 高 400, 默认支持透明度,白色)

var filter:ConvolutionFilter=new ConvolutionFilter(3,3,[.5,1,.5,1,0,1,.5,1,.5],3);// 声明一个卷积滤镜的实例 filter(矩阵有 3 列,3 行,用于矩阵转换的值的数组,矩阵转换中使用的除数)

var newfilter:DisplacementMapFilter=new DisplacementMapFilter(bt1,new Point(0,0),4,4,50,50);// 声明一个置换滤镜的实例 newfilter(源显示对象,目标显示对象的左上角相对于映射图像左上角的偏移量,在映射图像中置换 x 结果的颜色通道蓝通道,在映射图像中置换 y 结果的颜色通道蓝通道, 用于缩放映射计算的 x 置换结果的乘数, 用于缩放映射计算的 y 置换结果的乘数 )

addEventListener(Event.ENTER_FRAME,onframe);// 添加帧频事件侦听,调用函数 onframe

addEventListener(MouseEvent.MOUSE_OVER,ondown);// 添加鼠标滑入事件侦听,调用函数 ondown

addEventListener(MouseEvent.MOUSE_OUT,ondown);// 添加鼠标滑出事件侦听,调用函数 ondown

function ondown(e:MouseEvent):void {// 定义鼠标事件函数 ondown

k++>20?k=0:k=k;// k 每帧增加 1, 如果 k 大于 20, 则 k 获取 0, 否则什么也不做

}

function Rect() {// 自定义函数 Rect

bt1.fillRect(new Rectangle(mouseX/2,mouseY/2,2,2),0xffffff);// 在 bt1 中进行矩形填充(范围(左上角坐标(mouseX/2,mouseY/2),宽 2, 高 2),颜色为白色)

}

function onframe(e:Event):void {// 定义事件函数 onframe

k%2==1?Rect():0;// 如果 k 除以 2 的余数等于 1,调用自定义函数 Rect,否则什么都不做

var temp:BitmapData=bt2.clone();// 声明一个位图数据类实例 temp,获取 bt2 的副本

bt2.applyFilter(bt1,new Rectangle(0,0,550,400),new Point(0,0),filter);// 在位图 bt2 中应用滤镜(源位图,源矩形区域,目标图像中与源矩形左上角对应的点,卷积滤镜对象)

bt2.draw(temp,null,null,"subtract",null,false);// 在位图 bt2 中拍照(源显示对象,不变形,没有颜色转换,混合模式,绘制整个源对象,不做平滑处理)

bt3.draw(bt2,new Matrix(2,0,0,2),new ColorTransform(1,1,1,1,127,127,127),null,null,true);// 在位图 bt3 中拍照(源显示对象,在 X 和 Y 方向上放大 2 倍,颜色各红绿蓝通道偏移量均增大 127, 无混合模式,绘制整个源对象,平滑处理)

newfilter.mapBitmap=bt3;// 置换滤镜 newfilter 的包含置换映射数据的位图对象获取 bt3

mc.filters=[newfilter];// 为 mc 添加置换滤镜

temp.dispose();// 设置 temp 的宽和高都为 0, 不再调用,即从内存中清除

正文完