用ActionScript 3.0控制声音的播放和停止

Flash中控制声音的播放和停止只有通过ActionScript来控制。控制声音的播放和停止需要制作一个交互界面,最重要的就是一个按钮。接着上次在连接声音,介绍播放和停止声音的方法。

第一步需要创建一个MovieClip(影片剪辑),其中有两帧,第一帧为播放状态,第二帧为停止状态。把这个MovieClip放到舞台上,属性中设置实例名为musicControl。为了防止在MovieClip加载之后循环播放,需要在第一帧上添加stop();代码。状态图像就像这样:

接着需要把声音文件导入到Flash库中,并且设置从库连接至ActionScript。具体方法见这里。将Class(类)名设置成BGSound,这个值可以是任意的值,这里我用的是BGSound。

最后打开动作面板,按F9调出。输入以下代码:

var sound:BGSound=new BGSound();
sound.play(0,999);

var isMusicOn:Boolean=true;
musicControl.buttonMode=true;
musicControl.addEventListener(MouseEvent.CLICK,toggleMusic);

function toggleMusic(e:MouseEvent):void{
	if(isMusicOn==true){
		musicControl.gotoAndStop(2);
		isMusicOn=false;
		SoundMixer.stopAll();
	}else if(isMusicOn==false){
		musicControl.gotoAndStop(1);
		isMusicOn=true;
		sound.play(0,999);
	}
}

按行解释代码:

第1行,创建BGSound的对象sound。之前的文章说过ActionScript 3.0中所有的都是类,声音也不例外,所以使用之前需要创建对象。
第2行,播放sound对象。这样当影片加载之后自动播放声音。第一个参数是播放起始的偏移量,0为默认位置,也就是从头播放。第二个参数是循环的次数,Flash没有提供一个永远循环的方法,但是可以设置一个无限大的值近似于永远循环。我在这里用了999这个值,我所用的声音长度为23秒,循环999次就是22977秒,也就是6.3825个小时,几乎没有人会运行这么长的时间,所以也就接近于永久循环。
第4行,创建Boolean类型的变量isMusicOn,并且设置状态为true。这个变量用于保存声音播放的状态,true表示正在播放,false表示已停止。
第5行,设置musicControl的buttonMode属性为true,也就是按钮状态为true。按钮状态下,鼠标的悬停光标为手型,表示可以点击。这个不是必须的,当没有这行的时候musicControl的鼠标指针就是和系统一样的肩头指针。但是将指针设置成手型使交互性更友好。
第6行,给musicControl添加事件监听,事件类型为MouseEvent.CLICK,并将处理函数设置为toggleMusic。当鼠标点击一次musicControl就调用一次toggleMusic函数。
第8行,定义处理函数toggleMusic。参数名为e,参数类型为MouseEvent,这个值必须与注册的时间类型一致。
第9-12行,当isMusicOn的状态为true时,musicControl跳转到第2帧,也就是声音关闭的状态,并将isMusicOn设置为false。Flash中声音的停止需要调用SoundMixer类的静态方法stopAll()来实现。
第13-16行,当isMusicOn的状态为false时,MusicControl跳转到第1帧,也就是声音播放状态,并将isMusicOn设置为true。接着同第2行一样,开始播放声音。

代码不是很长,而且我认为解释也很到位了。网上很多人写的教程代码很全但是注释少得可怜,很难让人看懂。所以我尽量把代码解释完整。如果还有什么问题可以留言。下次介绍控制音量大小的方法。

13 Comments

  1. 备案没下来,域名被屏蔽了,等着下来。暂时只能用这个了
    做个简单的flash 要求在这呢,http://www.lokmeng.cn/go.php/component/id/7/
    还没学呢,就要求这个作业。如果有时间就帮忙下,谢谢了。

    Reply
  2. 想问下,这种效果只能使音乐暂停后,再播放的时候又会重新播放,那么怎样才能点击后继续播放暂停前的音乐进度捏?

    Reply
    • 不好意思,一直比较忙,今天才有时间。AS3内置的函数没有提供暂停的功能,其实暂停的功能可以自己做,很简单的。点击暂停按钮之后先停止音乐,然后记录下时间,然后播放的时候再从上次的时间开始播放就可以了。

      Reply
  3. 谢谢你特意回复我的问题,对于你在回复我时提到的记录时间,我也不大会,我对学代码还算不上是菜鸟呢,还希望你呢帮帮我,方便的话可以加一下我的QQ吗?582014517,谢谢

    Reply

Leave a Comment.