使用BITMAPDATA制作残影效果

 在MC运动的过程中,先对MC加入滤镜,然后建立一个bitmapdata进行绘制,踪迹由于colorTransform进行递减而消失。

 
//实现1
import flash.events.Event;
var radius = 5;
var particle = new Sprite();
particle.graphics.lineStyle(2,0xffffff);
particle.graphics.beginFill(0xffffff,0.8);
particle.graphics.drawCircle(-radius,-radius,2 * radius);
particle.graphics.endFill();
this.addChild(particle);
 
var bitmapData = new BitmapData(this.stage.stageWidth,this.stage.stageHeight,true,0x00000000);
var bitmap = new Bitmap(bitmapData);
this.addChild(bitmap);
var blur = new BlurFilter(2,1);
var colorTransform = new ColorTransform(0.9,0.95,0.9,1);
var origin = new Point(0,0);
 
 
this.addEventListener(Event.ENTER_FRAME,onFrame);
var speed:int=1;
var angle=0;
function onFrame(e:Event):void
{
angle+=10;
particle.x=100*Math.sin(angle/180)+200;
particle.y=100*Math.cos(angle/180)+200;
//在绘制新的图像之前应用滤镜到旧的图像。 
bitmapData.applyFilter(bitmapData,bitmapData.rect,origin,blur);
bitmapData.colorTransform(bitmapData.rect, colorTransform);
bitmapData.draw(this.stage);
}
 
//实现2
 
//用了bitmapData的colorTransform函数。在每次渲染时都对bitmapData的颜色和alpha通道做递减运算。
var bmp:Bitmap = new Bitmap();
var bmd:BitmapData = new BitmapData(550, 400, false, 0);
var rect:Rectangle = new Rectangle(0, 0, 550, 400);
var cTra:ColorTransform = new ColorTransform(0, .8, .8, .9);
var xp:int = 0;
var yp:int = 0;
bmp.bitmapData = bmd;
addChild(bmp);
stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
function enterFrameHandler(event:Event):void {
    bmd.colorTransform(rect, cTra);
    xp += (mouseX - xp) / 5;
    yp += (mouseY - yp) / 5;
    bmd.fillRect(new Rectangle(xp, yp, 10, 10), 0xffffff);
}
 
原文地址:https://www.cnblogs.com/chenhongyu/p/3342051.html