您的位置:首页 > 其它

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

2012-05-27 19:56 615 查看
以下是天地会的:金牌长老:给出的:使用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: