在AS3中通过平移动态定位声音

时间:2011-09-13 21:30:22

标签: flash actionscript-3 audio

我正试图在Flash中制作一个关于蚊子被粉碎的小游戏,我希望蚊子的声音像玩家面前一样平移(所以如果蚊子位于屏幕右侧,那么1,左边是-1。

问题是,我只能在播放方法中使用声音变换,如果我想更新蚊子的位置(在enterframe上发生,24fps),我会播放许多声音。

tl; dr,是否可以在flash中动态平移声音?

1 个答案:

答案 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;
    }
}