Flash制作弹性放大镜效果的详细代码

  • 来源: 中国教程网论坛   2016-04-28/09:35
  • 先看效果:

    http://www.68design.net/download/201004/20100406162541791.swf

    详细代码:

    [SWF(frameRate=24)] 

    function Yuan(r:Number ,ang:Number):Sprite { 

    var s:Sprite=new Sprite();//容器画板 

    var m:Matrix=new Matrix(); 

    m.createGradientBox(2*r,2*r,ang);//矩阵填充盒 

    s.graphics.beginGradientFill(GradientType.LINEAR,[0xff0000,0x000000],[1,1],[0,255],m); 

    s.graphics.drawCircle(r,r,r); 

    s.graphics.endFill(); 

    return s; 

    //创建2个半径为80圆 

    var spx:Sprite=Yuan(80,0); 

    var spy:Sprite=Yuan(80,Math.PI/2);//线性填充色偏移90 

    var ss:Number=2;//2的ss次幂 

    var i:Number=0; 

    //创建2个透明位图,大小为圆1圆2等同 

    var spbtx:BitmapData=new BitmapData(spx.width,spx.height,true,0); 

    var spbty:BitmapData=new BitmapData(spy.width,spy.height,true,0);//为拷贝颜色通道的源位图数据 

    spbtx.draw(spx);//位图1拍照圆1, 

    spbty.draw(spy);//位图2拍照圆2, 

    //位图数据1拷贝以位图2为源图像的颜色通道值,源红目标蓝(1,4) 

    spbtx.copyChannel(spbty,spbty.rect,new Point(),BitmapDataChannel.RED, BitmapDataChannel.BLUE);

    var spbtxm:Bitmap=addChild(new Bitmap(spbtx)) as Bitmap;//将位图数据1保存到位图显示对象中

    //创建用于添加滤镜的位图数据spb 

    var spb:BitmapData=new BitmapData(spx.width+60,spx.height+60,true,0); 

    spb.applyFilter(spbtx,spbtx.rect,new Point(30,30),new BlurFilter(30,30));//添加了模糊滤镜的图形

    var S:BitmapData=new BitmapData(spx.width+60,spx.height+60,false,0x808080); 

    S.draw(spb); 

    spb.dispose();//释放内存中的位图数据对象 

    spbtx.dispose(); 

    spbty.dispose(); 

    mc.addEventListener(Event.ENTER_FRAME,onMove); 

    var p:Point=new Point();//目标图左上角与置换图左上角的偏移量 

    function onMove(e:Event):void { 

    p.x+=(mouseX-spx.width/2-p.x)/5;//鼠标位置减置换图目标位置的差值,使置换的偏移量为缓动效果 

    p.y+=(mouseY-spx.height/2-p.y)/5; 

    var MaxNum:Number=50 * Math.cos(i / 2)*(Math.pow (2,ss));//置换强度,2的ss次幂,置换强度是动态的,因此产生弹性跳动 

    var filter:DisplacementMapFilter=new DisplacementMapFilter(S,p,1,4,MaxNum,MaxNum,DisplacementMapFilterMode.IGNORE);

    mc.filters=[filter]; 

    (i++>100)?i=0:0;//i大于100后让cos的角度为0,圆的边缘置换的强度渐渐减弱 

    (ss+=0.5>30)?ss=0:0;//弧度值乘的系数也为0 

    }


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多