AS3基础教程-第34课-处理声音(下)-SoundChannel

2025-04-25 13:39:43

如果要停止音乐的播放,我们发现,Sound类里并没有提供stop()方法,如下图所示。那么,要实现音乐的停止,就必须使用另外一个类:SoundChannel本节课详述SoundChannel类的使用

AS3基础教程-第34课-处理声音(下)-SoundChannel

工具/原料

flashCS6

一、舞台单击操作叙述:

1、将上节课的33.fla文件复制一个,重命名为34.fla因为33课调用的是外部声音,故此,我们将34.fla文件也放在相同的文件夹内,如此一来,就可以无需修改33课的代码。打开这个34.fla文件,按F9键,打开动作面板,我们直接分析并修改代码

AS3基础教程-第34课-处理声音(下)-SoundChannel

2、这是上节课的代码:var url:String="西海情歌.mp3"var urr:URLRequest=new URLRequest(url)var mysd:Sound=new Sound(urr)mysd.play()已经实现了外部声音的播放。现在我们想要实现下面的目的:单击舞台的任意位置后,声音停止播放。

3、那么,先实现舞台单击的操作。这部分内容在溱碳叛鹤前面章节提及过,也应用过,只不过没有详述步骤,现在详述之。舞台的单击和按钮的单击一模一样,仅是事件源的不同:按钮的事件源是按钮的实例名,舞台的事件源统潇瘵侃就是stage故此,可以用代码片段面板,但是,直接使用时会有下图的提示,要求必须在舞台上有一个已经设置好了实例名的对象,故此,我们需要先找一个按钮,并设置实例名,然后再操作。新建一个图层,从公用库内任意拖一个按钮到舞台上,在属性面板内设定实例名为anniu,然后用代码片段功能,添加鼠标单击命令

AS3基础教程-第34课-处理声音(下)-SoundChannel

4、会自动生成Actions图层,代码都写在了里面。为了方便管理代码,一般都是将代码都写在同一个图层内,故此,我们将原先的 图层1内的代码剪切掉,然后在Actions图层内粘贴。操作后如下图所示,现在图层1内已经没有代码,故删除图层1,又因为图层2内的按钮对于本例没有用处【仅用于调出代码】,故直接删除图层2,然后将库内的按钮删掉。最后,将代码内的 anniu 修改为 stage ,这一步至关重要,千万给修改回来。

AS3基础教程-第34课-处理声音(下)-SoundChannel

二、SoundChannel类:

1、接下来,进入主题:SoundChannel类首先,需要定义一个SoundChannel类的实例,与声明变量的写法一样,只不过必须用new关键字:var sdcn:SoundChannel=new SoundChannel()将该行代码放置到mysd.play()前面

AS3基础教程-第34课-处理声音(下)-SoundChannel

2、接下来,需要将声音播放的代码赋值给SoundChannel类的实例,故此,我们将mysd.play()这一行代码给修改为:sdcn=mysd.play()这个改变乃是关键,通过这一行赋值代码,将声音对象(mysd)和SoundChannel类的实例(sdcn)联系在一起

AS3基础教程-第34课-处理声音(下)-SoundChannel

3、测试影片,效果和上节课一样,一打开flash,就自动播放声音。现在我们在 舞台单击 的响应函数内部,添加停止播放的代码。仅需调用SoundChannel类的stop()方法即可:sdcn.stop()

4、接下来,我们将代码修改的更加复杂一些:仍然是撮劝丛食单击舞台任意位置,实现下面的效果:单击后暂停、再单击继续播放、再单击暂停、再单击继续播放,如此循膣默髻僳环往复。这里,需要注意,SoundChannel类的stop()方法是停止的效果,不是暂停的效果。要实现暂停,必须在停止播放之前记录声音播放的进度,然后使用Sound类的play()方法的第一个参数,就可以实现 继续播放的效果。记录声音播放进度的命令也在SoundChannel类内,乃是一个属性值,名为position ,其返回值是Number数字类型,返回的是播放进度的毫秒数。接下来,我们详述代码

5、首先,定义一个存储播放进度的变量,将其放在所有代码的最上面:var jindu:Number=0然后,在舞台单击的响应函数内部,给这个jindu变量赋值:jindu=sdcn.position注意:该行代码必须放在sdcn.stop()的上面!否则jindu就是0了,重要!

AS3基础教程-第34课-处理声音(下)-SoundChannel

6、最后,按照前面章节介绍的手段,对同一个对象实现单击命令时,循环实现两个不同的效果。这里不再赘述,直接给出代码:<1>事先,需要在代码的最上面新增一个布尔变量var kg:Boolean//默认值是false<2>然后,在舞台单击的需要函数内部,将sdcn.stop()这行代码给修改为:kg?sdcn=mysd.play(jindu):sdcn.stop() kg=!kg这里简要介绍一下:kg的默认值是false,故此第一次单击时,执行的是sdcn.stop()命令,从而让声音停止播放。每一次单击时,都会执行kg=!kg命令,从而对kg的值取反,则第二次单击时,kg的值变为true,则会执行sdcn=mysd.play(jindu)命令。该命令就是播放声音的代码了,只不过给play()方法内的第一个参数【未设置第二个参数】设置了数值为jindu,从而实现续播的效果

三、本例的完整代码

1、import fla衡痕贤伎sh.media.Sound;import flash.net.URLRequest;import flash.me颊俄岿髭dia.SoundChannel;//前面三行都是flashCS6自动生成的//由于在时间轴上写代码,故此前三行可以删掉var kg:Boolean//默认值是falsevar jindu:Number=0var url:String="西海情歌.mp3"var urr:URLRequest=new URLRequest(url)var mysd:Sound=new Sound(urr)var sdcn:SoundChannel=new SoundChannel()sdcn=mysd.play()stage.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler);function fl_MouseClickHandler(event:MouseEvent):void{ jindu=sdcn.position kg?sdcn=mysd.play(jindu):sdcn.stop() kg=!kg}

2、最后,看一下这个fla文件的组成:库内没有任何元件,舞台上也是 空白关键帧【没有任何对象】,仅仅有一个Actions图层。声音文件和fla文件在同一个文件夹内

AS3基础教程-第34课-处理声音(下)-SoundChannel

3、这就是载入的魅力,fla文件的体积超级小巧,非常方便文件的共享和修改

4、本课的代码虽然不麻烦,但我思虑再三,还是将源码共享吧。又因为本课和上节课都调用了同一个声音,故此,我将上节课的源码也一并共享。两节课的源码放入了同一个文件夹内,文件夹的名字是33-34

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢