ActionScript3实现真实的蓝天白云

更新时间:2024-03-16 作者:用户投稿原创标记本站原创 点赞:33497 浏览:156710

摘 要 本文对制作蓝天白云提出新的解决方案,就是使用ActionScript3代码实现其动画效果,使之能够在低效的CPU运行顺畅.

关键字 蓝天白云 ActionScript3.0

中图分类号:TP319 文献标识码:A

要想实现真实的蓝天白云动画,应该抛弃原先的传统方式,运用ActionScript脚本语言方可模拟真实的场景.根据现实的考虑和分析,我们使用了BitmapData类中两个重要方法:perlinNoise和ColorMatrixFilter方法.通过使用这两个方法,我们可以得到一个真实的动态云的效果并且对于天空和云的颜色也能轻易改变.当然这样的特效是非常消耗CPU资源.

首先来说说AS3中BitmapData类的perlinNoise方法.

PerlinNoise是基于一个复杂的算法来创建随机纹理效果的方法.这个算法是完全定值的算法:只要输入相同的参数,必会输出相同的结果.正是由于这种聪明的程序结构使得我们将它用于产生随机效果的变化.在AS3中,你可以创建BitampData对象,并在这个对象的颜色通道中对其参数使用PerlinNoise方法,从而使一个“原始”的BitmapData对象中包含PerlinNoise,能够产生出大量的丰富效果.PerlinNoise方法很少单独存在,大多数时候是与ColorMatrixFilter结合一起来使用.


下面我们以DispMapFilter为例.

rateX是负责水平方向的频度.rateX的值越低,水平方向的频度就越高.在rateX数值低的情况下,你将会看到大量的小云彩横向散开分布.

rateY是负责垂直方向的频度.rateY的值越低,垂直方向的频度就越高.

usedCPUs是至关重要的,它主要负责改变动画时CPU使用率.每调节不同的频程不仅会改变云彩的细节,更会影响CPU的使用率.当usedCPUs设为2,云彩看起来太光滑而不真实;改为3,可以接受的,但效果不是太好.当然,数值越大,占用CPU更多,从而动画变慢,因此这里我们设置usedCPUs为5.

randSeed是算法的起点.我们随机一个起点,只需一次便可在ENTER_FRAME持续发生,用于创造出移动参数的偏移量.

Stitch是使得PerlinNoise的图像边缘更滑.

typeNoise将它设置为真或检测,用于改变Noise的性质种类.

colorChannel指定Noise信号的颜色通道.1仅为红色,3为红和绿,7为红绿蓝,15为红绿蓝并带alpha通道.

grayNoise用于设置灰色Noise,当然如果选择false,则为彩色Noise.

offset是一些点的数组.用于记录水平和垂直方向的偏移量,以便控制云彩的运动.

再来谈谈ColorMatrixFilter方法.

在程序代码中我们不再重复运算PerlinNoise,这是消耗CPU的根源所在.因为重复的图案不会引人注意,因此云彩的移动才是关键,我们先可利用PerlinNoise的“stitch”参数来创建出一副图像的无缝连接,然后通过BitmapData类中的scroll()方法实现即可.这种方法可完成连续的位图数据的复制,并让运动更加有效.

最后我们一起来对分层云彩,使之效果更加逼真.前面我们已经创建了一个非常不错的效果.我们增加简单的分层ScrollingClouds可实现三维方式的云彩效果,通过调节alpha层为顶层,在对构造函数中useBackground变量进行设置其参数为false后,便能将透明背景的效果最终呈现出来了.