這是一整個完整的類,僅供學習使用!希望大家不要追溯著作權問題,這個類使用了一個常量類來完成功能,常量類我就不放出了,相信看懂了,應該可以自己寫出來。public class SoundManager<br />{<br />/**<br /> * 預設聲音大小<br /> */<br />public var defaultVolume:Number=1.0;</p><p>private var activeSound:Dictionary;</p><p>private var _soundOn:Boolean=true;//是否關閉聲音,遊戲音效<br />private var _bgSoundOn:Boolean=true;//是否關閉背景音樂</p><p>private static var _instance:SoundManager=null;</p><p>public function SoundManager()<br />{<br />activeSound = new Dictionary();<br />}</p><p>/**<br /> * 設定全域聲音的大小<br /> * @param volume 聲音音量<br /> *<br /> */<br />public function setGlobalVolume(volume:Number):void<br />{<br />SoundMixer.soundTransform = new SoundTransform(volume);<br />}<br />/**<br /> * 設定聲音的大小<br /> *<br /> * @param name名稱<br /> * @param volume聲音<br /> */<br />public function setVolume(name:String, volume:Number):void<br />{<br />var sc:SoundChannel = getActiveChannel(name);<br />if (sc)<br />sc.soundTransform = new SoundTransform(volume);<br />}<br />/**<br /> *取聲音通道<br /> * @param name<br /> * @return<br /> *<br /> */<br />public function getActiveChannel(name:String):SoundChannel<br />{<br />return activeSound[name];<br />}<br />/**<br />* 設定聲音位置<br />*<br />* @param name名稱<br />* @param pan聲音位置,範圍由-1到1<br />*/<br />public function setPan(name:String, pan:Number):void<br />{<br />var sc:SoundChannel = getActiveChannel(name);<br />if (sc)<br />{<br />sc.soundTransform = new SoundTransform(sc.soundTransform.volume,pan);<br />}<br />}</p><p>/**<br /> * 聲音是否現正播放<br /> *<br /> * @param name名稱<br /> *<br /> */<br />public function isPlaying(name:String):Boolean<br />{<br />return activeSound[name]!=null;<br />}</p><p>/**<br /> * 停止播放<br /> *<br /> * @param name名稱<br /> */<br />public function stop(name:String):void<br />{<br />var sc:SoundChannel = activeSound[name];<br />delete activeSound[name];</p><p>if (sc)<br />{<br />sc.stop();<br />}<br />}<br />/**<br /> * 停止播放所有現正播放的音樂<br /> *<br /> */<br />public function stopAll():void<br />{<br />SoundMixer.stopAll();<br />}<br />/**<br /> * 播放<br /> *<br /> * @param name名稱<br /> * @param loop迴圈次數,-1為無限迴圈<br /> * @param volume聲音<br /> */<br />public function play(name:String,startTime:Number=0, loop:int=1, volume:Number=-1,panning:Number=0):void<br />{<br />try<br />{<br />var ref:Class;<br />if(ApplicationDomain.currentDomain.hasDefinition(name))<br />ref = ApplicationDomain.currentDomain.getDefinition(name) as Class;<br />else<br />return;<br />var _sound:Sound=new ref() as Sound;<br />var channel:SoundChannel = _sound.play(startTime, (loop != -1)?loop:int.MAX_VALUE);</p><p>if (channel)<br />{<br />if (loop != 0 && loop != -1)<br />channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteListener);</p><p>activeSound[name] = channel;<br />channel.soundTransform = new SoundTransform((volume != -1) ? volume : defaultVolume,panning);</p><p>if(!_soundOn&&name!=SoundsConst.BATTLE_SOUND&&name!=SoundsConst.BG1_SOUND)//遊戲音效關閉<br />{<br />channel.soundTransform = new SoundTransform(0);<br />}</p><p>if(!_bgSoundOn&&(name==SoundsConst.BATTLE_SOUND||name==SoundsConst.BG1_SOUND))//背景音樂關閉<br />{<br />channel.soundTransform = new SoundTransform(0);<br />}<br />}<br />}<br />catch(e:Error)<br />{<br />}<br />}<br />private function soundCompleteListener(evt:Event):void<br />{<br />evt.currentTarget.removeEventListener(Event.SOUND_COMPLETE, soundCompleteListener);</p><p>for (var key:* in activeSound)<br />{<br />if (activeSound[key] == evt.currentTarget)<br />{<br />delete activeSound[key];<br />return;<br />}<br />}</p><p>}<br />/**<br /> *取SoundManager對象<br /> * @return<br /> *<br /> */<br />public static function getInstance():SoundManager<br />{<br />if(_instance==null)<br />_instance=new SoundManager();</p><p>return _instance;<br />}<br />/**<br /> *是否關閉音樂<br /> * @return<br /> *<br /> */<br />public function get soundOn():Boolean<br />{<br />return _soundOn;<br />}<br />/**<br /> * 是否關閉遊戲音效<br /> * @param value<br /> *<br /> */<br />public function set soundOn(value:Boolean):void<br />{<br />if(_soundOn!=value)<br />{<br />_soundOn = value;</p><p>for (var key:* in activeSound)<br />{<br />if (key != SoundsConst.BG1_SOUND&&key != SoundsConst.BATTLE_SOUND)<br />{<br />var _sc:SoundChannel=activeSound[key];</p><p>if (_sc)<br />{<br />if(!_soundOn)<br />_sc.soundTransform = new SoundTransform(0);<br />else<br />_sc.soundTransform = new SoundTransform(1);<br />}<br />}<br />}<br />}<br />}</p><p>/**<br /> *是否關閉背景音樂<br /> * @return<br /> *<br /> */<br />public function get bgSoundOn():Boolean<br />{<br />return _bgSoundOn;<br />}<br />/**<br /> * 是否關閉背景音樂<br /> * @param value<br /> *<br /> */<br />public function set bgSoundOn(value:Boolean):void<br />{<br />if(_bgSoundOn!=value)<br />{<br />_bgSoundOn = value;</p><p>if(!_bgSoundOn)<br />{<br />setVolume(SoundsConst.BG1_SOUND,0);<br />setVolume(SoundsConst.BATTLE_SOUND,0);<br />}<br />else<br />{<br />setVolume(SoundsConst.BG1_SOUND,1);<br />setVolume(SoundsConst.BATTLE_SOUND,1);<br />}<br />}<br />}