package org.util
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.DisplayObject;
import flash.events.Event;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
/**
* PS 效果类
* @author Jave.Lin
*
*/
public class PSEffectUtil
{
public static var stageFrameRate:Number=12;
//动态模糊
public static function motionBlur(disObj:Bitmap,duration:Number=2000,onCompleteCallback:Function=null):void
{
// if(disObj==null)return;//throw new Error('PSEffectUtil.action(disObj) disObj==null!!!!');
//
// if(disObj.stage==null)return;//throw new Error('PSEffectUtil.action(disObj) disObj.stage==null!!!!');
var scaleXY:Number;
var rota:Number;
var rotaAdd:Number;
var rotaVec:Number;
var singleFrameElapsed:Number;
var renderCount:int;
var renderedCount:uint;
var bmpData:BitmapData=new BitmapData(disObj.width,disObj.height);
bmpData.draw(disObj);
var disObjBitmap:Bitmap=new Bitmap(bmpData);
var isSetVars:Boolean=false;
function onEnterFrameHandler(e:Event):void
{
if(!isSetVars)
{
isSetVars=true;
scaleXY=1;
rota=disObj.rotation;
rotaAdd=0.05;
rotaVec=rotaAdd/5;
singleFrameElapsed=1000/stageFrameRate;
renderCount=duration/singleFrameElapsed;
renderedCount=0;
}
if(renderedCount>renderCount)
{
disObj.removeEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
if(onCompleteCallback!=null)onCompleteCallback();
return;
}
renderedCount++;
var addR:Number=rotaAdd;
rotaAdd+=rotaVec;
if(renderedCount>renderCount/2)
{
rota += addR;
}
scaleXY *= 1.05;
var m:Matrix = new Matrix();
m.translate(-bmpData.width / 2,-bmpData.height / 2);
m.scale(scaleXY,scaleXY);
m.rotate(rota);
m.translate(bmpData.width / 2,bmpData.height / 2);
disObj.bitmapData.draw(bmpData,m,new ColorTransform(1,1,1,0.2),BlendMode.DARKEN);
}
disObj.removeEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
disObj.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
}
public static function motionLoopRedColorTransform(disObj:DisplayObject,duration:Number=2000,redOffsetTarget:Number=255,onCompleteCallback:Function=null):void
{
// if(disObj==null)return;//throw new Error('PSEffectUtil.motionLoopRedColorTransform(disObj) disObj==null!!!!');
//
// if(disObj.stage==null)return;//throw new Error('PSEffectUtil.motionLoopRedColorTransform(disObj) disObj.stage==null!!!!');
var singleFrameElapsed:Number;
var renderCount:int;
var renderedCount:uint;
var redInterval:Number;
var redAdd:Number;
var isSetVars:Boolean=false;
function onEnterFrameHandler(e:Event):void
{
if(!isSetVars)
{
isSetVars=true;
singleFrameElapsed=1000/stageFrameRate;
renderCount=duration/singleFrameElapsed;
renderedCount=0;
redInterval=0;
redAdd=0;
}
if(renderedCount>renderCount)
{
disObj.removeEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
if(onCompleteCallback!=null)onCompleteCallback();
return;
}
renderedCount++;
// trace('renderedCount:'+renderedCount);
var ctf:ColorTransform=disObj.transform.colorTransform;
redInterval=redOffsetTarget-ctf.redOffset;
// trace('ctf.redOffset:'+ctf.redOffset);
// trace('redInterval:'+ctf.redOffset);
redAdd=(redInterval*(renderedCount/renderCount));
// trace('redAdd:'+redAdd);
ctf.redOffset+=redAdd;
// trace('ctf.redOffset:'+ctf.redOffset);
disObj.transform.colorTransform=ctf;
// trace('disObj.transform.colorTransform:'+disObj.transform.colorTransform.redOffset);
}
disObj.removeEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
disObj.addEventListener(Event.ENTER_FRAME,onEnterFrameHandler);
}
}
}
AS3 动态模糊效果类
关注
打赏