8.4.5 渐变闪动

来源:互联网 发布:windows系统补丁下载 编辑:程序博客网 时间:2024/05/16 19:04

当显示对象在完全显示和完全消失之间切换,形成了闪动效果。当闪动两种极限状态之间存在过渡状态,则形成了渐变效果。当显示对象从完全显示淡出,直至完全消失,然后又从完全消失状态淡入,回复到完全显示,如是周而复始,就形成了交迭渐变闪动(参考图)

使用现有模块,在例8-4中实现交迭渐变闪动是非常容易的。

(1)为了控制轨迹的走向,需要先声明一个新的变量fadeStep。并在fadeInOut()函数中,同animObject1.alpha一起作为参数传递。

var fadeStep:Number;

……

animObject1.alpha=fadeInOut(animObject1.alphafadeStep);

……

(2)fadeStep-0.05时,对象animObject1将会淡出;判断animObject1.alpha的值,在对象消失后,重设fadeStep0.05,则对象animObject1将会淡入,直至animObject1.alpha==1,判断并再次将fadeStep设为-0.05,即完成了一个交迭渐变闪动的周期。

if(animObject1.alpha==1){

fadeStep=-0.05

}

if(animObject1.alpha==0){

fadeStep=0.05

}

animObject1.alpha=fadeInOut(animObject1.alphafadeStep);

(3)考虑到变量的作用域,需要在定时器开始之前声明fadeStep全局变量,并为其赋予初始值。这样,在定时器触发响应函数中,fadeStep的值可以保持稳定。

如果将fadeStep声明在了定时器触发响应函数中,则默认作为一个局部变量,每次执行都会被创建和删除,就无法起到应有的作用了。如果一定要使用在定时器触发响应函数中声明的变量,则必须增加更多的验证代码,读者可自行尝试。

完整代码段如下:

var animTimer:Timer = new Timer(50 100);

animTimer.addEventListener("timer" animTimerHandler);

animTimer.addEventListener("timerComplete" animComplete);

var fadeStep:Number=0.05;

animTimer.start();

function animTimerHandler(event:TimerEvent):void {

         //动画代码编写入口

         if (animObject1.alpha==1) {

                   fadeStep=-0.05;

         }

         if (animObject1.alpha==0) {

                   fadeStep=0.05;

         }

         animObject1.alpha=fadeInOut(animObject1.alphafadeStep);

 

}

function animComplete(event:TimerEvent):void {

         animObject1.alpha=1;

}

 

//说明:fadeInOut()实现线性轨迹的淡入淡出计算。

//参数:obj_attr为对象属性;change-rate为变化速率,正为淡入,反之淡出;max_value为对象属性取值范围。

//返回值:计算后的属性值,从01之间的小数。

// function fadeInOut(obj_attr:Numberchange_rate:Number max_value:Number=1):Number{}

//版本1.0

function fadeInOut(obj_attr:Numberchange_rate:Numbermax_value:Number=1):Number {

         var temp_attr:Number;

         temp_attr=obj_attr+change_rate;

         temp_attr=temp_attr/max_value;

         if (temp_attr<=0) {

                   temp_attr=0;

         }

         if (temp_attr>=1) {

                   temp_attr=1;

         }

         return temp_attr;

}

千里之行,始于足下。深刻理解和掌握功能程序模块的写法,打好基础,步步为营,日后开发具有万行代码规模的项目也并非遥不可及的事。

(4)运行程序,可以看到对象animObject1在舞台上交迭淡入淡出,相当平滑完美。其周期轨迹如图所示:

 
原创粉丝点击