2011-09-13 2 views
1

私はフラッシュで爆発した蚊についてミニゲームを作ろうとしています。蚊の音がプレイヤーの前にいるかのようにパンしたいスクリーンパンの右は1、左は-1)。AS3にパンニングしながら音を動的に配置する

問題は、playメソッドでサウンドトランスフォームしか使用できないため、蚊の位置を更新したい場合(enterframe、24fpsで発生)、多くのサウンドが再生されます。

tl; drは、フラッシュで音を動的にパンすることは可能ですか?

答えて

2

確かに可能ですし、先日似たようなことをやったことがあります。

音を包み込み、状態を維持できるようにパン、ボリュームなどのプロパティを追加したクラスを作成しました。

サウンドが再生されたら、新しい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オブジェクトごとに反復を作成して、気をつけてください。 –

関連する問題