2011-09-13 21 views
1

我想在Flash中製作一個迷你遊戲,讓蚊子叮叮噹噹,並且我希望蚊子的聲音像泛泛的一樣泛起來(如果蚊子在屏幕右側將爲1,左側爲-1)。在AS3中動態定位平移聲音

問題是,我只能在播放方法中使用聲音轉換,如果我想更新蚊子的位置(發生在enterframe,24fps),我會播放許多聲音。

tl; dr,是否可以在閃存中動態地平移聲音?

回答

2

當然是可能的,而我恰好在前幾天做了類似的事情。

我創建了一個包裝聲音和爲pan,volume等添加屬性的類,以便可以維護狀態。

當播放聲音時,只需創建一個新的SoundTransform並將其分配給新創建的SoundChannel。然後,設置基於包裹起來聲音類泛值上SoundTransform pan屬性:

public class SoundWrapper 
{ 
    private var _pan:Number; 
    private var _sound:Sound; 
    private var _soundTransform:SoundTransform; 
    private var _soundChannel:SoundChannel; 

    public function SoundWrapper(sound:Sound):void 
    { 
     _sound = sound 
    } 

    public function playSound():void 
    { 
     _soundChannel= _sound.play(); 
     _soundTransform = new SoundTransform(); 
     _soundTransform.pan = pan; 
     _soundChannel.soundTransform = _soundTransform; 
     _soundChannel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete); 
    } 

    public function onSoundComplete(e:Event):void 
    { 
     playSound(); 
    } 

    public function stop():void 
    { 
     if(_soundChannel) 
     { 
      _soundChannel.stop(); 
      _soundChannel.removeEventListener(Event.SOUND_COMPLETE, onSoundComplete); 
     } 
     _soundTransform = null; 
     _soundChannel = null; 
    } 

    public function set pan(value:Number):void 
    { 
     _pan = value; 

     if(_soundTransform) 
     { 
      _soundTransform.pan = _pan; 
     } 
    } 

    public function get pan():Number 
    { 
     return _pan; 
    } 
} 
+0

對於不重複許多次,它可能很好,但聲音,因爲這將創建一個新的SoundTransform對象每次迭代, 警惕。 –