首 页免费资源建站技术源码下载软件下载精品淘吧客户留言
用户登陆 | 用户注册
您当前的位置:笃志小屋建站技术网页设计Flash → 文章内容
Flash MX 编程深层次应用-初级特效(5)
作者:佚名  来源:不详  发布时间:2007-9-11 0:18:48

2.3 综合特效

    

由于Flash MX功能非常强大,有些特效很难去界定它的属性与类别,甚至只能说它是完成了某一个功能,不能说是特效了。比如鼠标跟随,这种特效对画面的贡献有多大,很难讲清楚;又比如说一个很酷的飞行菜单或者旋转菜单,乃至其他各种类别的菜单,都是不错的特效;还有一些多媒体的一些功能,比如声音的播放、麦克风与摄像头的使用等都属于这个范畴。


2.3.1  多边形鼠标跟随

在众多Flash特效中,大家比较喜欢讨论的一个效果就是鼠标跟随。这种效果在过去讨论得非常多,但最近一年来,由于大家都把注意力放在卡通动画与MTV动画制作方面,所以已经很少有人关注这种特效了。但是没有人关注并不代表它没有用,它在很多动画中还有一定的应用空间,让我们先看看下面的程序吧:

_root.createEmptyMovieClip("c",1);

colorMe = new Color(c);

Mouse.addListener(_root);

_root.onMouseDown = function() {

    //当第一次鼠标按下时,鼠标跟随开始

    c.clear();

    //设定画线的线宽为1,颜色值默认,透明度为100

    c.lineStyle(1,'',100);

    radius = Math.random()*100+50;

    //随机生成一个多边形,边数从312

    sides = Math.ceil(Math.random()*10)+2;

    //计算多边形与圆心的夹角

    radInc = (2*Math.PI)/sides;

    //根据夹角画线,移到中心位置的正下方

    c.moveTo(radius*Math.sin(0),radius*Math.cos(0));

    for(i=0;i<sides;i++) {

             //画边线

c.lineTo(radius*Math.sin(i*radInc),radius*Math.cos(i*radInc));

             }

//画最后一条闭合线

    c.lineTo(radius*Math.sin(0),radius*Math.cos(0));        

}

_root.onEnterFrame = function() {

    //复制一个前面画的正多边形

    c.duplicateMovieClip("c"+((j<2) ? j=2 : ++j),j);

    //调整多边形的中心位置,以80%的速度向鼠标当前位置靠拢

    c._x += (_root._xmouse-c._x)*.2;

    c._y += (_root._ymouse-c._y)*.2;

    _root["c"+j].onEnterFrame = function() {

        //设置透明度与旋转,每移动一下透明度就减5,然后旋转5

             this._alpha -= 5;

             this._rotation += 5;

    }

    //设置颜色值

    myTrans={rb:String((c._x/550)*255),bb:String((c._y/400)*255),gb:'127',ab:'100'};

    colorMe.setTransform(myTrans);

    //保证最多只有20个多边形跟随

    _root["c"+(j-20)].removeMovieClip();

}

这个鼠标跟随效果虽然不是很酷,但是却说明了一个非常重要的问题,就是要真正学好编程就要有相当的数学基础。比如这里的多边形画线原理就是任何正多边形的顶点都在一个圆上,而圆心到正多边形的顶点的距离都等于圆的半径,角度很明显就是360°除以边数了,如图2-22所示。

2-22

上面的程序是用弧度代替了角度,其实质是一样的!于是只要有了一个顶点的位置,根据角度加上三角函数运算就可以求出所有顶点的位置,从而画出任意边数的正多边形了!


2.3.2  MP3播放器

在以前,要取得外部声音文件比较麻烦,需要将每一个声音文件转化成SWF格式,由主控部分用loadMovie的方法调入,然后才可以正常播放。但是到了Flash MX,这种调入外部声音文件的方法变得很简单,只需一个loadSound语句便可以轻松地得到解决。让我们看看用这个功能制作的MP3播放器吧:

function playSong() {

    //播放声音函数

    songIndex = (songIndex == undefined) ? 0 : songIndex;

    dongua_sound = new Sound();

    //当歌曲播放结束时换一首歌

    dongua_sound.onSoundComplete = changeSong;

    //取外部声音文件

    currentFile = fileList[songIndex];

    dongua_sound.loadSound(currentFile, true);

}

function changeSong() {

    songIndex = (++songIndex)%fileList.length;

    playSong();

}

_global.formatTime = function(milliseconds) {

    //计算声音的分钟数

    var s = "00"+parseInt(milliseconds/1000%60);

    return parseInt(milliseconds/1000/60)+":"+s.substr(s.length()-2);

};

//显示播放进度条所放的位置

begin_x = 100;

begin_y = 130

this.createTextField("txtDisplay", 2, begin_x, begin_y, 300, 20);

txtDisplay.setNewTextFormat(new TextFormat("_sans", null, null, true, null, null, null, null, "center"));

//播放器列表

fileList = ["1.mp3", "2.mp3", "3.mp3", "4.mp3", "5.mp3"];

playSong();

_root.onEnterFrame = function() {

    //显示歌曲的名称

    this.txtDisplay.text = "NOW PLAYING: "+currentFile.split(".")[0];

    //显示歌曲的进度及总长度

    this.txtDisplay.text += " ("+formatTime(dongua_sound.position)+" / "+formatTime(dongua_sound.duration)+")";

    //用直线线段显示播放比例

    _root.clear();

    _root.moveTo(begin_x, begin_y+10);

    _root.lineStyle(20, 0x8080FF, 100);

    _root.lineTo(300*(dongua_sound.position/dongua_sound.duration)+begin_x, begin_y+10);

    _root.lineStyle(20, 0x8080FF, 25);

    _root.lineTo(begin_x+300, begin_y+10);

};

prev.onPress = function() {

//播放下一首

songIndex = (++songIndex)%fileList.length;

    dongua_sound.stop();

    playSong();

};

back.onPress = function() {

    //播放上一首

    songIndex = (--songIndex)%fileList.length;

    if (songIndex<0) {

             songIndex = fileList.length-1;

    }

    dongua_sound.stop();

    playSong();

};

程序中prevback分别代表两个按钮,一个是控制往前跳转的,一个是控制向后跳转的。这个播放器不但有load功能,还有前进与后退功能。运行画面如图2-23所示。虽然在读取外部的声音文件后,播放的时候可以取得其播放进度,但是却无法在停止之后重新从该停止位置继续播放,甚至都无法再对其进行播放,惟一的办法就是再次load它。不知这是不是Flash MXBug

2-23


2007-9-11 0:18:48免费资源duzhi.net

[ ] [返回上一页] [打 印]

【笃志小屋duzhi.net】

  技术文章导航
  技术文章排行
  精彩推荐
Copyright www.duzhi.net All Right Reserved.
设计制作:翼迅设计室 Equick Desgin Home 在线QQ:303471038
网络备案号:冀ICP备06008201号 站长信箱:webmaster#duzhi.net(将#换为@)
本站部分文章和图片来源于网络和内容提供伙伴,如果侵犯了您的权利,请留言告知,本站定会及时删除相关文件!