DropShadowFilter投影濾鏡會在原始對象下建立一個副本,然後用純色填充後並模糊副本,實現投影的效果。它有很多參數可以建立多種不同的效果。DropShadowFilter的構造方法如下:
DropShadowFilter (
distance:Number = 4,
angle:Number = 45,
color:uint = 0,
alpha:Number = 1,
blurX:Number = 4,
blurY:Number = 4,
strength:Number = 1,
quality:int = 1,
inner:Boolean = false,
knockout:Boolean = false,
hideObject:Boolean = false
);
還記得前兩天我們學的BlurFilter模糊濾鏡嗎?它只有三個參數,多簡單啊!事情到了DropShadowFilter就沒那麼簡單了。我們來一一看看這些選項:
- distance:顯示對象副本較原始對象的位移量,以像素為單位
- angle:投影的位移角度
- color:投影顏色
- alpha:投影的透明度
- blurX:投影在x座標軸方向的模糊量
- blurY:投影再y座標軸方向的模糊量
- strength:設定投影的強度,值越大投影越暗,與背景產生的對比差異越大
- quality:模糊執行的次數,和BlurFilter裡的quality一樣(實際上它們的模糊原理是一樣的)
- inner:決定是投影是在繪製在對象內部還是外部。如果inner設定為true,則投影被限制繪製在對象內部。產生的效果讓人感覺背景被挖了一個洞。
- knockout:設定是否應用挖空效果,即使顯示對象填色變為透明,並顯示文檔的背景顏色。如果不想顯示原對象的填充內容,可以設定knockout為true,此時下層的背景映像會顯示出來,同時保留投影(通俗的講,就是投影中原對象部分被挖掉,露出背景部分)。當需要在背景上挖個洞,但又要保持映像填充時,可以非常好的展現這個參數的功能。此時這隻knockout為true,投影效果2-18所示。 hideObject:當設定為true時會隱藏原對象,同時顯示投影而不挖空(如果knockout是false)。結果是只有投影而沒有對象,所以如果你只需要投影時,可以使用這個參數。想象一下效果,一架飛機從頭頂飛過,而你只看到了地面上的影子。在實際的應用開發中,我經常用它來讓兩個分別有和沒有投影的組件對齊。在複雜的組件上應用投影,會影響啟動並執行效能,所以,直接在組件下方添加一個對象,並在這個對象中繪製投影效果會更好。這樣我們可以取消原對象的投影濾鏡,而保持投影的效果。
圖2-18.應用的了DropShadowFilter濾鏡的矩形,其中inner和knockout屬性都是true
圖2-18效果的原始碼DropShadowFilterTest類如下:package {
import flash.filters.BitmapFilterQuality;
import flash.filters.DropShadowFilter;
[SWF(width=550, height=400, backgroundColor=0xEEEEEE)]
public class DropShadowFilterTest extends BitmapFilterTest {
override protected function applyFilter():void {
var filter:DropShadowFilter = new DropShadowFilter(10);
filter.blurX = 15;
filter.blurY = 15;
filter.quality = BitmapFilterQuality.HIGH;
filter.inner = true;
filter.knockout = true;
_shape.filters = [filter];
}
}
}
這個類繼承BitmapFilterTest類,並在shape對象上應用了DropShadowFilter。內部投影和挖空效果讓人感覺背景被挖空了一塊。