2011年11月22日 星期二

[AS3] 殘影效果 → 加上BlurFilter、GrowFilter慮鏡

GlowFilter(color:uint = 0xFF0000, alpha:Number = 1.0, blurX:Number = 6.0, blurY:Number = 6.0, strength:Number = 2, quality:int = 1, inner:Boolean = false, knockout:Boolean = false)
以指定的參數初始化新的 GlowFilter 實體。
BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)
以指定的參數初始化濾鏡。













1001122_shadowB.swf -
- 若BitmapData建構式的第3個參數透明度設為false,則BitmapData沒有透明度,以colorTransform()持續打淡Alpha會變成黑色。


1001122_shadowC.swf
- 若BitmapData建構式的第3個參數透明度設為true,可讓BitmapData擁有透明度,以colorTransform()持續打淡Alpha會透出下方底色。

GlowFilter()建構函式
public function GlowFilter(color:uint = 0xFF0000, alpha:Number = 1.0, blurX:Number = 6.0, blurY:Number = 6.0, strength:Number = 2, quality:int = 1, inner:Boolean = false, knockout:Boolean = false)
參數
color:uint (default = 0xFF0000) — 光暈的顏色,會以十六進位格式 0xRRGGBB 表示。 預設值為 0xFF0000。
alpha:Number (default = 1.0) — 顏色的 Alpha 透明度值。 有效值為 0 到 1。 例如,.25 會設定 25% 的透明度值。
blurX:Number (default = 6.0) — 水平模糊化量。 有效值為 0 到 255 (浮點)。 2 的冪次方數值 (如 2、4、8、16 和 32) 是經過最佳化的,以便在顯示時會比其它值更為快速。
blurY:Number (default = 6.0) — 垂直模糊化量。 有效值為 0 到 255 (浮點)。 2 的冪次方數值 (如 2、4、8、16 和 32) 是經過最佳化的,以便在顯示時會比其它值更為快速。
strength:Number (default = 2) — 壓印強度或範圍。 數值越高,便壓印越多顏色,光暈與背景之間的對比越強烈。 有效值為 0 到 255。
quality:int (default = 1) — 套用濾鏡的次數。 請使用 BitmapFilterQuality 常數¡
BitmapFilterQuality.LOW
BitmapFilterQuality.MEDIUM
BitmapFilterQuality.HIGH
如需詳細資訊,請參閱 quality 屬性的說明。
inner:Boolean (default = false) — 指定光暈是否為內光暈。 true 值會指定內光暈。 false 值會指定外光暈 (也就是物件外緣周圍的光暈)。
knockout:Boolean (default = false) — 指定物件是否具有去底色特效。 true 值可以讓物件的填色透明,並顯露出文件的背景顏色。

BlurFilter()建構函式
public function BlurFilter(blurX:Number = 4.0, blurY:Number = 4.0, quality:int = 1)
參數
blurX:Number (default = 4.0) — 水平模糊化量。 有效值為 0 到 255.0 (浮點值)。
blurY:Number (default = 4.0) — 垂直模糊化量。 有效值為 0 到 255.0 (浮點值)。
quality:int (default = 1) — 套用濾鏡的次數。 您可以使用 BitmapFilterQuality 常數來指定品質:
flash.filters.BitmapFilterQuality.LOW
flash.filters.BitmapFilterQuality.MEDIUM
flash.filters.BitmapFilterQuality.HIGH
高品質相當接近「高斯」模糊。 在大部分的應用程式中,使用這三個值就已足夠。 雖然您可以使用其它數值 (最高可至 15) 來達到不同的效果,但請注意,越高的值就代表顯示速度越緩慢。


import flash.geom.ColorTransform;
import flash.display.BitmapData;
import flash.display.Bitmap;
import flash.events.Event;
import flash.geom.Rectangle;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.display.Graphics;
import fl.transitions.Tween;
import fl.transitions.Transition;
import fl.transitions.easing.Regular;
import fl.transitions.TweenEvent;
import flash.filters.GlowFilter;
import flash.filters.BlurFilter;

var finishX:Number;
var finishY:Number;
var duration:Number;
var tweenX:Tween;
var tweenY:Tween ;

var ctf:ColorTransform = new ColorTransform(1, 1, 1, .88);
var bmd:BitmapData = new BitmapData(550,400,false,0xffff00);
var bm:Bitmap = new Bitmap(bmd);
var rec:Rectangle = new Rectangle(0,0,bmd.width,bmd.height);
addChild(bm);

var motionTarget:Sprite = new Sprite();
motionTarget.x = getNewPos()[0];
motionTarget.x = getNewPos()[1];
motionTarget.graphics.lineStyle(3,0xffffff,1.0);
motionTarget.graphics.beginFill(0xffff00,1.0);
motionTarget.graphics.drawCircle(50,50,20);
motionTarget.graphics.endFill();
var targetContainer:Sprite = new Sprite();
targetContainer.addChild(motionTarget);

/*濾鏡*/
var blurFilter:BlurFilter = new BlurFilter(8,8,1);
var glowFilter:GlowFilter = new GlowFilter(0xffff66,1,32,32,1,1,false,false);
/*targetContainer.filters = [blurFilter,glowFilter];*/
motionTarget.filters = [blurFilter,glowFilter];

addEventListener(Event.ENTER_FRAME,loopHandler);
tweenFunc();

function loopHandler(event:Event):void{
 bmd.colorTransform(rec,ctf);
 bmd.draw(targetContainer);
 return;
}

function tweenFunc():void{
 tweenX = new Tween(motionTarget,"x",Regular.easeOut,motionTarget.x,finishX,duration,true);
 tweenY = new Tween(motionTarget,"y",Regular.easeOut,motionTarget.y,finishY,duration,true);
 tweenX.addEventListener(TweenEvent.MOTION_FINISH,tweenFinish);
 return;
}

function tweenFinish(event:TweenEvent):void{
 tweenX.removeEventListener(TweenEvent.MOTION_FINISH,tweenFinish);
 getNewPos();
 tweenFunc();
 return;
}

function getNewPos():Array{
 finishX = Math.ceil(Math.random()*(stage.width-motionTarget.width));
 finishY = Math.ceil(Math.random()*(stage.height-motionTarget.height));
 duration = Math.random()*1.8+0.3;
 var _tmpInfo:Array = [finishX,finishY,duration]
 return _tmpInfo;
}


沒有留言: