1
我想在Flash中製作一個迷你遊戲,讓蚊子叮叮噹噹,並且我希望蚊子的聲音像泛泛的一樣泛起來(如果蚊子在屏幕右側將爲1,左側爲-1)。在AS3中動態定位平移聲音
問題是,我只能在播放方法中使用聲音轉換,如果我想更新蚊子的位置(發生在enterframe,24fps),我會播放許多聲音。
tl; dr,是否可以在閃存中動態地平移聲音?
我想在Flash中製作一個迷你遊戲,讓蚊子叮叮噹噹,並且我希望蚊子的聲音像泛泛的一樣泛起來(如果蚊子在屏幕右側將爲1,左側爲-1)。在AS3中動態定位平移聲音
問題是,我只能在播放方法中使用聲音轉換,如果我想更新蚊子的位置(發生在enterframe,24fps),我會播放許多聲音。
tl; dr,是否可以在閃存中動態地平移聲音?
當然是可能的,而我恰好在前幾天做了類似的事情。
我創建了一個包裝聲音和爲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;
}
}
對於不重複許多次,它可能很好,但聲音,因爲這將創建一個新的SoundTransform對象每次迭代, 警惕。 –