DropShadowFilter——投影滤镜
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就没那么简单了。我们来一一看看这些选项:
![](http://hiphotos.baidu.com/luoxiandong99/pic/item/72b8c019632762d048f2d80ca0ec08fa503dc610.jpg)
图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。内部投影和挖空效果让人感觉背景被挖空了一块。
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)。结果是只有投影而没有对象,所以如果你只需要投影时,可以使用这个参数。想象一下效果,一架飞机从头顶飞过,而你只看到了地面上的影子。在实际的应用开发中,我经常用它来让两个分别有和没有投影的组件对齐。在复杂的组件上应用投影,会影响运行的性能,所以,直接在组件下方添加一个对象,并在这个对象中绘制投影效果会更好。这样我们可以取消原对象的投影滤镜,而保持投影的效果。
![](http://hiphotos.baidu.com/luoxiandong99/pic/item/72b8c019632762d048f2d80ca0ec08fa503dc610.jpg)
图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。内部投影和挖空效果让人感觉背景被挖空了一块。