我正试图在Flash中制作一个关于蚊子被粉碎的小游戏,我希望蚊子的声音像玩家面前一样平移(所以如果蚊子位于屏幕右侧,那么1,左边是-1。
问题是,我只能在播放方法中使用声音变换,如果我想更新蚊子的位置(在enterframe上发生,24fps),我会播放许多声音。
tl; dr,是否可以在flash中动态平移声音?
答案 0 :(得分:2)
当然是可能的,而我前几天碰巧做了类似的事情。
我创建了一个包含声音的类,并为pan,volume等添加了属性,以便可以维护状态。
播放声音时,只需创建一个新的SoundTransform
并将其分配给新创建的SoundChannel
。然后,根据包装的声音类中的声相值设置SoundTransform
上的声相属性:
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;
}
}