想想是怎麼回事....
輝光進來
第一次,我假定alpha爲1,如果不是,我的解釋是有點過,但非常接近。
- 所以,alpha是1.你的第一個if語句
if(glow.alpha >= 1)
是真的。所以,減去0.05,應用過濾器並重復。
- alpha現在是0.95。這不是> = 1,並且它不是< = 0。所以最後的else運行,
glow.alpha -= 0.5
。循環重複。
- alpha現在是0.45。與上面第2部分相同的情況。所以
glow.alpha -= 0.5
再次運行。並重復。
- alpha現在是-0.05。現在你的
else if
運行,增加0.05。所以阿爾法現在在0.重複。
- 同樣的事情發生在第4號。現在阿爾法是0.05。
- 現在我們回到
else
。減去0.5。離開我們在-0.45。
- 循環現在處於將繼續添加0.05直到達到+0.05的狀態,然後將返回到-0.45。
這樣做,我會採取一種稍微不同的方法。
創建一個新的.fla,使其成爲DocumentClass並運行它。
package {
import flash.display.MovieClip;
import flash.display.DisplayObject;
import flash.filters.GlowFilter;
import flash.events.Event;
import flash.display.Sprite;
public class GlowTest extends MovieClip {
public var filter:GlowFilter;
public var target:Sprite;
public var pulseDown:Boolean = true;
private var _glowTarget:DisplayObject;
public function GlowTest() {
target = new Sprite();
target.graphics.beginFill(int(Math.random() * 0xFFFFFF), 1);
target.graphics.drawCircle(0, 0, int(Math.random() * 200));
target.graphics.endFill();
target.x = int(Math.random() * stage.stageWidth);
target.y = int(Math.random() * stage.stageHeight);
addChild(target);
// constructor code
var color:Number = 0x33CCFF;
var alpha:Number = 0.8;
var blurX:Number = 35;
var blurY:Number = 35;
var strength:Number = 2;
var inner:Boolean = false;
var knockout:Boolean = false;
var quality = 1;
//var quality:Number = BitmapFilterQuality.HIGH;
filter = new GlowFilter(color, alpha, blurX, blurY, strength, quality, inner, knockout);
startPulse(target, filter);
}
public function startPulse(obj:DisplayObject, glow:GlowFilter):void {
_glowTarget = obj;
_glowTarget.filters = [glow];
_glowTarget.addEventListener(Event.ENTER_FRAME, pulse);
}
public function pulse($evt:Event):void {
if (pulseDown) {
filter.alpha -= 0.05;
} else {
filter.alpha += 0.05;
}
if (filter.alpha >= 1) {
filter.alpha = 1;
pulseDown = true;
} else if (filter.alpha <= 0) {
filter.alpha = 0;
pulseDown = false;
}
_glowTarget.filters = [filter];
}
}
}
但是,我甚至不會這樣做。我會建議使用一個庫來完成這個Tween,比如TweenLite/TweenMax。 http://www.greensock.com/tweenmax/
做在一個方向將類似於這樣的代碼:
import com.greensock.*;
import com.greensock.plugins.*;
TweenPlugin.activate([TintPlugin]);
var glowEffect:TweenMax = new TweenMax(mc,0,{glowFilter:{color:0x330000,alpha:1,blurX:5,blurY:5,str ength:2,quality:2,overwrite:5}});
的你只需要交替做補間。你甚至可以使用glowEffect Tween的onComplete以相反的方向觸發它。
如果你想更簡潔的代碼,你可以在脈衝函數改成這樣:
public function pulse($evt:Event):void {
filter.alpha += pulseDown ? -0.05 : 0.05;
if (filter.alpha >= 1 || filter.alpha <= 0) {
filter.alpha = Math.round(filter.alpha);
pulseDown = !pulseDown;
}
_glowTarget.filters = [filter];
}
這幾乎總結了正是我發佈:) – sberry
對不起,我沒有看到你的帖子,當我張貼。呵呵 – CrociDB