0

次の変数を持つ SoundHandler クラスがあります。

private static var musicChannel: SoundChannel;
private static var effectsChannel: SoundChannel;
private static var narrationChannel: SoundChannel;
private static var narrationMuted:Boolean;

初期化関数では:

var classReference: Class = getDefinitionByName(narrationClassName) as Class; 
var s: Sound = new classReference(); 
narrationChannel = s.play();

エフェクトと音楽チャンネルは正常に動作しますが、stop() が呼び出されてもナレーション チャンネルは停止しません。関数は次のとおりです。

    public static function playNarration(narrationClassName: String): void {
        if (!narrationMuted) {
            narrationChannel.stop(); //NOT WORKING--THE SOUND KEEPS PLAYING!
            var classReference: Class = getDefinitionByName(narrationClassName) as Class;
            var s: Sound = new classReference();
            narrationChannel = s.play();
        }
    }

SoundMixer.stopAll() はナレーションの音を止めますが、音楽や効果音も止めるので使えません。

Sound オブジェクトの作成方法が原因で stop() が機能していないと思われますが、よくわかりません。外部からロードしても問題は解決しません:

     public static function playNarration(narrationClassName: String): void {
            if (!narrationMuted) {
                narrationChannel.stop();
                var s: Sound = new Sound();
                s.addEventListener(Event.COMPLETE, onNarrationSoundLoaded);
                var req: URLRequest = new URLRequest("sounds/Narration/sub_narr_1.mp3");
                s.load(req);
            }
        }
        private static function onNarrationSoundLoaded(e: Event): void {
            var localSound: Sound = e.target as Sound;
            narrationChannel = localSound.play();
        }

ナレーション サウンドを静的変数として保持しても機能しません。

private static var subNarr1:Sound;

public static function playNarration(narrationClassName: String): void {
            if (!narrationMuted) {      
                narrationChannel.stop();
                narrationChannel = subNarr1.play();
            }
        }

どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1