[转载]AS3.0中的显示编程(七)-- 滤镜(上)

[url]http://windtoto.blog.51cto.com/1986737/405059[/url]

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://windtoto.blog.51cto.com/1986737/405059
在这篇显示编程的教程中,我不打算介绍图形绘制的相关知识。因为自己也没怎么用到过,我不习惯用AS代码来绘制图形,都是直接在舞台上绘制的。不过滤镜的相关知识,我觉得大家还是有必要了解下的,在Flash的创作中,有时能起到意想不到的效果。
Flash提供的滤镜共有9种,分别是:
斜角滤镜(BevelFilter)
模糊滤镜(BlurFilter)
投影滤镜(DropShadowFilter)
发光滤镜(GlowFilter)
渐变斜角滤镜(GradientBevelFilter)
渐变发光滤镜(GradientGlowFilter)
颜色矩阵滤镜(ColorMatrixFilter)
卷积滤镜(ConvolutionFilter)
置换图滤镜(DisplacementMapFilter)
其中,前面6种是简单滤镜,后面3种是复杂滤镜。所谓简单滤镜,就是可以直接在Flash的滤镜面板上直观操作的滤镜,滤镜面板如下图所示:

[img]http://dl.iteye.com/upload/attachment/369009/c72694f5-d354-3cbe-99e5-829f1f655106.jpg[/img]

我的个人习惯还是偏向于舞台操作的。所以如果只需要用到这六种滤镜,又不需要制作滤镜动画的时候,我通常都是选择直接在舞台上操作的。另外要说明的是,当你接下去学习本章的时候,最好能对比着舞台上的滤镜学习,这样对效果还有滤镜的属性都会有一个比较直观的把握。

(一)如何创建并应用滤镜
首先,我们在舞台上绘制一个红色长方形。然后填入以下代码:
var myDisplayObject = this.getChildAt(0); //获取舞台显示对象
var filter:DropShadowFilter = new DropShadowFilter(); //创建滤镜
var filtersArray:Array = new Array(filter); //建立滤镜数组
myDisplayObject.filters = filtersArray; //应用滤镜
大家可以看到,filters接受的是一个滤镜数组。如果对显示对象应用了多个滤镜,则会按照顺序,依次累积。

(二)如何修改和删除滤镜
修改滤镜时,可以重新创建滤镜数组,然后赋值给filters属性。但是不可直接在filters属性上进行数组操作。比如:
(1) 用这种方法是正确的
filtersArray.push(new BlurFilter());
myDisplayObject.filters = filtersArray;
(2) 用这种方法是错误的
myDisplayObject.filters.push(new BlurFilter());
大家请比较一下两者的区别。

删除滤镜只需要给filters属性赋值null即可,如下:
myDisplayObject.filters = null;

(三)滤镜的工作原理
滤镜是通过把原始对象的副本缓存为透明位图来工作的。当你对显示对象启用滤镜时,不管当前显示对象的cacheAsBitmap值是多少,都会自动转换成true。当删除所有滤镜后,才会恢复原来的值。
既然如此,使用滤镜后,那些位图缓存的优点都会保留,而缺点同样会保留。所以我们使用滤镜时,占用内存会变大。并且要尽可能的避免对显示对象做很复杂的动画,这样对性能会有比较大的影响。
使用滤镜时,还有两点需要注意:第一点、滤镜区域是不能做重叠判断或者点击判断的。比如对一个影片剪辑做了斜角滤镜,那么在斜角部分,重叠判断和点击判断都是无效的(影片剪辑的原始区域自然是有效的)。第二点,滤镜是不支持缩放、旋转和倾斜的。所以对滤镜的本身进行这些变化时(也要尽量避免),滤镜是不会跟着变化的。

下一篇,我会为大家演示每个滤镜的效果和相应的代码。不感兴趣的朋友可以略过。
本文出自 “寂寞风之谷” 博客,请务必保留此出处http://windtoto.blog.51cto.com/1986737/405059
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值