Динамическое позиционирование звука с панорамированием в AS3 - PullRequest
1 голос
/ 14 сентября 2011

Я пытаюсь сделать мини-игру во Flash о разбитом комаре, и я хочу, чтобы звук комара панорамировался так, как если бы он был перед плеером (поэтому, если комар находится справа от экрана, панорамирование будет1 и -1 слева).

Проблема в том, что я могу использовать преобразование звука только в методе воспроизведения, в результате чего у меня воспроизводится много звуков, если я хочу обновить положение комара (котороепроисходит на enterframe, 24fps).

tl; dr, возможно ли динамическое панорамирование звуков во вспышке?

1 Ответ

2 голосов
/ 14 сентября 2011

Конечно, возможно, и на днях я просто делал нечто подобное.

Я создал класс, который обернул звук и добавил свойства панорамирования, громкости и т. Д., Чтобы можно было поддерживать состояние.

Когда воспроизводится звук, просто создайте новый 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...