AS3 使用Bitmap+Matrix实现的:径向+转旋+叠加图层效果的模糊效果

以下是天地会的:金牌长老:给出的:使用Bitmap+Matrix实现的:径向+转旋+叠加图层效果的模糊效果。
相信这种效果很多游戏都会用上。
先收藏一下。赞一个!
 
http://bbs.9ria.com/viewthread.php?tid=69188
 
package
{
        import flash.display.Bitmap;
        import flash.display.BitmapData;
        import flash.display.BlendMode;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.filters.BlurFilter;
        import flash.geom.ColorTransform;
        import flash.geom.Matrix;
        import flash.geom.Point;
        import flash.text.TextField;
        
        import ghostcat.filter.ColorMatrixFilterProxy;
        
        
        public class aaaa extends Sprite
        {
                [Embed(source="img1.jpg")]
                public var cls:Class;
                
                public var bmd:BitmapData;
                public var screen:Bitmap;
                public var scale:Number;
                public var r:Number;
                        
                public function aaaa()
                {
                        bmd = new cls().bitmapData;
                        screen = new Bitmap(bmd.clone());
                        addChild(screen);
                        
                        scale = 1.0;
                        r = 0.0;
                        
                        stage.addEventListener(MouseEvent.CLICK,clickHandler);
                }
                
                private function clickHandler(event:MouseEvent):void
                {
                        if (hasEventListener(Event.ENTER_FRAME))
                        {
                                removeEventListener(Event.ENTER_FRAME,tickHandler);
                                scale = 1.0;
                                r = 0.0;
                                screen.bitmapData = bmd.clone();
                        }
                        else
                        {
                                addEventListener(Event.ENTER_FRAME,tickHandler);        
                        }
                }
                
                private function tickHandler(event:Event):void
                {
                        r += 0.05;
                        scale *= 1.05;
                        var m:Matrix = new Matrix();
                        m.translate(-bmd.width / 2,-bmd.height / 2);
                        m.scale(scale,scale);
                        m.rotate(r);
                        m.translate(bmd.width / 2,bmd.height / 2);
                        screen.bitmapData.draw(bmd,m,new ColorTransform(1,1,1,0.2),BlendMode.ADD);
                }
        }
}
 
第二类:http://bbs.9ria.com/viewthread.php?tid=73048
import flash.display.BitmapData;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
 
 
addChild(new Bitmap(getZoomed(new 元件1(),5,1)));
 
function getZoomed(obj:DisplayObject, dist:Number, qual:Number):BitmapData {
        var width0:Number = obj.width+(dist*0.05*obj.width)+4;
        var height0:Number = obj.height+(dist*0.05*obj.height)+4;
        var out:BitmapData = new BitmapData(width0, height0, true, 0x00000000);
        var buffer:BitmapData = new BitmapData(width0, height0, true, 0x00000000);
        var blur:BlurFilter = new BlurFilter(3, 3, qual);
        var cmat:ColorTransform = new ColorTransform(1, 1, 1, 0.2, 0, 0, 0, 0);
        var mat:Matrix = new Matrix();
        var step:Number;
        for (var i:Number = dist+20; i>1; i--) {
                step = 0.05*i;
                mat.identity();
                mat.scale(step,step);
                mat.translate(width0/2-obj.width*step/2,height0/2-obj.height*step/2);
                buffer.fillRect(buffer.rect,0x00000000);
                buffer.draw(obj,mat);
                buffer.applyFilter(buffer,buffer.rect,new Point,blur);
                mat.identity();
                out.draw(buffer,mat,cmat);
        }
        mat.identity();
        mat.translate(dist*0.05*obj.width/2+2,dist*0.05*obj.height/2+2);
        cmat.alphaMultiplier = 0.3;
        buffer.dispose();
        out.draw(obj,mat,cmat,null,null,true);
        return out;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值