您当前的位置: 首页 > 

Jave.Lin

暂无认证

  • 4浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

AS3 动态模糊效果类

Jave.Lin 发布时间:2012-05-27 20:00:13 ,浏览量:4

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);	
		}
	}
}
关注
打赏
1664331872
查看更多评论
立即登录/注册

微信扫码登录

0.0391s