淡入和淡出Word下载.docx

上传人:b****4 文档编号:16897777 上传时间:2022-11-27 格式:DOCX 页数:8 大小:21.10KB
下载 相关 举报
淡入和淡出Word下载.docx_第1页
第1页 / 共8页
淡入和淡出Word下载.docx_第2页
第2页 / 共8页
淡入和淡出Word下载.docx_第3页
第3页 / 共8页
淡入和淡出Word下载.docx_第4页
第4页 / 共8页
淡入和淡出Word下载.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

淡入和淡出Word下载.docx

《淡入和淡出Word下载.docx》由会员分享,可在线阅读,更多相关《淡入和淡出Word下载.docx(8页珍藏版)》请在冰豆网上搜索。

淡入和淡出Word下载.docx

根据本模型,假设变化速率为0.05时,则每个时间周期,对象的透明度增加0.05。

如果对象的初始透明度是0,对象在动画开始的时候完全不可见,则经历1个时间周期后,对象的alpha变为0.05;

经历2个时间周期后,对象的alpha变为0.10;

经历3个时间周期后,对象的alpha变为0.15……当经历20个时间周期后,对象的alpha变为1.00,此时对象完全不透明显示。

换而言之,这一过程就是动画对象在20个时间周期内从不可见逐渐切入到完全显示状态,实现了对象的淡入。

同理,淡出效果也可以使用此模型,不过变化速率是一个负值。

假设变化速率为-0.05,则每个时间周期,对象的透明度减少0.05。

对于一个初始alpha属性为1的对象,为当经历20个时间周期后,其alpha值变为0.00,此时对象完全透明不可见。

这一过程实现了动画对象由完全显示到完全消失的渐变效果,是为淡出。

8.4.2 

脚本实现

考虑到淡入和淡出效果都是基于同样的数学模型,可以在代码实现时运用函数将其过程模块化。

(1)建立参数fadeInOut(),该函数不需要返回值,但显然需要参数,分别是对象anim_obj,以及对象的变化速率fade_rate。

代码如下。

functionfadeInOut(anim_obj:

DisplayObject,fade_rate:

Number):

void{

 

return;

}

(2)在函数内添加代码,以根据变化速率fade_rate控制动画对象anim_obj的alpha属性。

本函数将来是在定时器的触发响应函数中周期调用的,所以每一次执行时,只需要修改1*fade_rate到anim_obj.alpha即可。

只需要一条语句就能达到目的。

anim_obj.alpha+=fade_rate;

(3)将此函数添加到例8-4中,修改定时器响应函数,注释掉原有的语句,新添加对fadeInOut()的引用。

整体代码如下:

varanimTimer:

Timer=newTimer(50,100);

animTimer.addEventListener("

timer"

,animTimerHandler);

timerComplete"

,animComplete);

animTimer.start();

functionanimTimerHandler(event:

TimerEvent):

void{

//动画代码编写入口

//animObject1.alpha=(animObject1.alpha==1?

0:

1);

fadeInOut(animObject1,-0.05)//新增对fadeInOut()函数的引用

}

//响应定时器结束事件

functionanimComplete(event:

animObject1.alpha=1;

//自定义的模块

(4)至此,代码初步成型了。

运行程序,可以看到显示对象animObject1逐渐淡出的效果。

如果把fadeInOut函数中的fade_rate设为正值,这可以令alpha初始状态为0的不可见对象逐渐淡入。

fade_rate的绝对值越小,淡入淡出的过程就越平滑,读者可自行实验。

使用如此简短的代码,便能实现淡入淡出效果,可见AS3确实是很简便的动画控制语言。

下一节将介绍如何进一步强化模块,使其能胜任更多的任务。

8.4.3 

模块的封装

上节编写的模块虽然能实现简单的淡入淡出功能,但是在代码设计上并不符合OOP模块的封装规范,存在许多问题:

1.不利于OOP封装

直接在模块内部操作对象属性,不利于OOP封装。

作为通用模块,完全可以适用于对象各种属性的相类似轨迹的运算,而不是仅仅局限于操作alpha属性,例如:

显示对象的红色通道逐渐淡出淡入等。

然而,如果在内部操作对象alpha属性,使得此模块的功能固化了,在其他场合下不可利用。

此外,有时情况需要对运算后的数值稍作修正再传递给舞台对象,上节所写的模块无法提供这种灵活性,在实际开发中应尽量避免这样不符合规范的模块出现,如图8-14所示。

图8-14 

不符合规范的模块封装

2.无数值检查

算术运算直接赋值给对象,没有数值检查。

这种习惯是危险的。

如果超出了被赋值变量的允许范围,在一些情况下会出现难以预期的错误。

作为程序员,应自觉养成良好的习惯,在代码中对数值进行检查。

3.缺少注释和模块说明

当团队共享和日后维护时,缺少注释和说明的代码将造成许多麻烦。

实践证明:

编写脚本代码时不写注释说明,无益于加快开发进度。

插入注释和说明实属举手之劳,应当时时自觉为之。

8.4.4 

淡入淡出模块

基于以上原因,需要对此模块改写。

functionfadeInOut(obj_attr:

Number,change_rate:

Number,max_value:

Number=1):

Number{

vartemp_attr:

temp_attr=obj_attr+change_rate;

returntemp_attr;

在改写后的代码中,参数obj_attr取代了anim_obj,其意义不再是显示对象本身,而是显示对象的某项属性。

在模块内部,也并不对此属性进行操作,而是新建了一个变量temp_attr,其值根据传入参数运算得到。

在模块的返回值中,将变量temp_attr的值传递到外部,供调用代码处理。

对于模块,输入和输出都是纯数据,模块执行本职的运算任务,并不修改对象(如图8-15所示)。

这种写法就良好地体现了OOP的模块封装精神。

图8-15 

符合要求的模块封装

除此之外,新的模组具备了一个返回值。

应该认真界定此返回值的取值范围。

对于本例,简易取值是0到1的Number类型,这样,即使是那些取值在0到255之间的颜色通道,也可以很轻松地通过255*fadeInOut()方式获得可用值。

因此,添加相应的数值检查语句如下。

Number,max_value:

temp_attr=temp_attr/max_value;

if(temp_attr<

=0){

 

temp_attr=0;

if(temp_attr>

=1){

temp_attr=1;

相比上节中只包含一条语句的模块,此处的代码量确实增加了不少。

可只要养成了习惯,书写这样的代码是很迅速的,并不会拖延开发的进度。

当然,补上注释和说明也是必要的。

//说明:

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

//参数:

obj_attr为对象属性;

change-rate为变化速率,正为淡入,反之淡出;

max_value为对象属性取值范围。

//返回值:

计算后的属性值,从0到1之间的小数。

//functionfadeInOut(obj_attr:

Number{}

//版本1.0

改写后的模块更加适合OOP开发,也便于扩展和封装进自定义方法内,在稍后的开发中持续发挥作用。

随着各种模块越来越多,功能越来越强,形成各种强大的类。

海纳百川,最终实现开发的整体进化,完成开发任务,这就是AS3的OOP开发过程。

8.4.5 

渐变闪动

当显示对象在完全显示和完全消失之间切换,形成了闪动效果。

当闪动两种极限状态之间存在过渡状态,则形成了渐变效果。

当显示对象从完全显示淡出,直至完全消失,然后又从完全消失状态淡入,回复到完全显示,如是周而复始,就形成了交迭渐变闪动(如图8-16所示)。

图8-16 

线性淡出渐变和交迭渐变闪动

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

(1)为了控制轨迹的走向,需要先声明一个新的变量fadeStep。

并在“fadeInOut()”函数中,同animObject1.alpha一起作为参数传递。

varfadeStep:

……

animObject1.alpha=fadeInOut(animObject1.alpha,fadeStep);

(2)当fadeStep为-0.05时,对象animObject1将会淡出;

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

if(animObject1.alpha==1){

fadeStep=-0.05

if(animObject1.alpha==0){

fadeStep=0.05

(3)考虑到变量的作用域,需要在定时器开始之前声明fadeStep全局变量,并为其赋予初始值。

这样,在定时器触发响应函数中,fadeStep的值可以保持稳定。

如果将fadeStep声明在了定时器触发响应函数中,则默认作为一个局部变量,每次执行都会被创建和删除,就无法起到应有的作用了。

如果一定要使用在定时器触发响应函数中声明的变量,则必须增加更多的验证代码,读者可自行尝试。

完整代码段如下。

Number=0.05;

//动画代码编写入口

if(animObject1.alpha==1){

fadeStep=-0.05;

if(animObject1.alpha==0){

fadeStep=0.05;

animObject1.alpha=fadeInOut(animObject1.alpha,fadeStep);

animObject1.alpha=1;

Number{

temp_attr=temp_attr/max_value;

if(temp_attr<

=0){

if(temp_attr>

=1){

千里之行,始于足下。

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

(4)运行程序,可以看到对象animObject1在舞台上交迭淡入淡出,相当平滑完美。

其周期轨迹如图8-17所示。

图8-17 

线性交迭渐变闪动轨迹

8.4.6 

透明度渐变

以交迭渐变闪动为代表的透明度渐变,是一种常用的动画效果。

不仅可以直接使用该效果表现夜空繁星和烛光的闪烁,也可同其他显示对象灵活组合出各种变化。

很多令人印象深刻的视觉特效,往往是灵活运用透明度渐变的结果。

例如,可以灵活使用透明度渐变调整对象的颜色,也许听起来不太可能,但不仅可行,而且相当简单。

当一个红色显示对象覆盖在蓝色显示对象上时,对红色对象应用交迭渐变闪动,最终效果是蓝色对象在蓝色和红色之间交叠渐变,实现了颜色的调整,如图8-18所示。

与直接修改蓝色对象的颜色相比,此法在代码编写时更加直观。

由于现代计算机处理器对透明度运算的硬件优势,采用这种机制生成的颜色过渡动画,在执行效率上还要更高一些。

特别是对高分辨率的舞台显示,其优势更加明显。

图8-18 

利用透明度交迭渐变更改颜色

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1