My FAQ,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 图形图象 > 网页设计 > Flash
Flash MX 编程深层次应用-高级特效(4)
作者:未知 时间:2005-05-21 12:12 出处:ChinaZ.com 责编:MyFAQ
              摘要:Flash MX 编程深层次应用-高级特效(4)
3.2 综合特效(2)

    

3.2.2  血管特效

Flash MX中,很多特效都是与画线功能分不开的,这一点说明了Macromedia公司在Flash MX中加入一些简单绘图功能之后,可制作的内容变得丰富起来,效果也可以变得非常奇妙。下面这个特效就是直接使用画线功能,通过合理安排画线的颜色与位置之后,产生出一个真实的血管网状图效果。具体程序如下:

Stage.scaleMode = "noScale";

this._x = this._y=200;

this.onEnterFrame = function() {

//最多产生1000根血管线

    if (++time<1000) {

             //血管生长的角度,在上一次生长角度正负25度之间波动

             t += (Math.PI/180*(25-random(50)));

             //血管的长度是20-50

             len = random(30)+20;

             //根据上次血管的位置计算新血管的位置,让血管可以无限延伸

             this._x -= ((x1=x+len*Math.sin(t))-x);

             this._y -= ((y1=y+len*Math.cos(t))-y);

             //用一种随机深红色来画血管

             this.lineStyle(3, "0x"+(random(102)+51).toString(16)+"0000", 50);

             this.lineTo((x=x1), (y=y1));

             //20%的概率画血管的分支

             if (random(100)<=20) {

                      branch(x, y, t);

             }

    }

};

function branch(x, y, t) {

    _root.createEmptyMovieClip("branch"+(++bc%1000), bc);

    _root["branch"+bc]._x = x;

    _root["branch"+bc]._y = y;

    //分支血管的角度

    _root["branch"+bc].t = t;

    _root["branch"+bc].onEnterFrame = function() {

             //让分支角度在正负30度之间变动

             this.t += (Math.PI/180*(30-random(60)));

             //长度是2050之间

             this.len = random(30)+20;

             //比主血管细一些,线只有一个点的宽度

             this.lineStyle(1, "0x"+(random(150)+100).toString(16)+"0000", 50);

             this.x += this.len*Math.sin(this.t);

             this.y += this.len*Math.cos(this.t);

             this.lineTo(this.x, this.y);

             //有的细血管长,有的短,通过删除时间早晚不同的方式来控制

             //为了节约系统资源,在停止画分支时要清除它的onEnterframe事件函数

             if (++this.n>random(15)+15) {

                      delete this.onEnterFrame;

             }

    };

}

这个血管特效的原理就是通过程序不断地画出新的线段,然后这个线段就把前面已经画好的对象往前推动相应的距离,然后程序在适当的时候产生一个相对短小一点的分支线段,如此这般反复地产生,反复地推进,就出现了这个特别的效果。

为了便于大家理解,程序中前面部分专门增加了if (++time<1000)语句,如果读者看不懂程序的运行,可以把这里的1000改成510之间比较小的数值,看看运行的结果如何。看过这个结果之后,很多不明白之处应该可以迎刃而解了。最后让我们看看正常的程序运行是什么效果,图3-10是将血管推出去的效果,图3-11是血管被推出去很长时间之后又被推回画面的效果。


     

3-10                                         3-11


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 myfaq.com.cn All rights reserved. www.myfaq.com.cn 版权所有