Звук зацикливается, но завершается последняя итерация - PullRequest
0 голосов
/ 24 июля 2011

То, что я пытаюсь сделать, это зациклить звук при событии мыши вниз, а затем при событии мыши вверх, я хочу завершить любую итерацию и остановить цикл.

Эта логика ниже должна работать, но я понятия не имею, почему это не так.

import flash.events.MouseEvent;
import flash.media.Sound;
import flash.events.Event;
import flash.media.SoundChannel;

//ExplosionSound is .wav file linked in my library.
var s:Sound=new ExplosionSound();
var sc:SoundChannel = new SoundChannel();

stage.addEventListener(MouseEvent.MOUSE_DOWN, loopSound);
stage.addEventListener(MouseEvent.MOUSE_UP, stopLoop);

function loopSound(e:MouseEvent):void {
    sc=s.play(0,9999);

}

function stopLoop(e:MouseEvent):void {
    sc.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
}

function soundCompleteHandler(e:Event):void{
    sc.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
    sc.stop();
}

Я мог бы просто поставить sc.stop (); в моей функции stopLoop (), но это немедленно останавливает звук.

Мне, например, нужно: скажем, у вас стреляет из пулемета, и когда вы прекращаете стрелять, последний звук пули не прекращается сразу, он заканчивается.

Надеюсь, это имеет смысл.

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 24 июля 2011

SOUND_COMPLETE «никогда» не срабатывает при зацикливании звука - срабатывает только после 9999-го зацикливания. так что вы должны обойти это:

import flash.events.MouseEvent;
import flash.media.Sound;
import flash.events.Event;
import flash.media.SoundChannel;

//ExplosionSound is .wav file linked in my library.
var s:Sound=new ExplosionSound();
var sc:SoundChannel = new SoundChannel();

var isMouseDown:Boolean = false;

stage.addEventListener(MouseEvent.MOUSE_DOWN, loopSound);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUpHandler);

function loopSound(e:MouseEvent):void {
    isMouseDown = true;
    playSound();
}

function playSound():void
{
    sc=s.play(0);
    sc.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
}

function onMouseUpHandler(e:MouseEvent):void {
    isMouseDown = false;
}

function soundCompleteHandler(e:Event):void{
    sc.removeEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
    sc.stop();

    if (isMouseDown) 
    {
        playSound();
    }
}

просто воспроизведите звук один раз в mousedown (но оставьте флажок независимо от того, нажата мышь или нет) и добавьте обработчик SOUND_COMPLETE. если звук закончился, а мышь все еще не работает, воспроизведите звук. если кнопка мыши отпущена, флаг сбрасывается, и звук не воспроизводится после завершения .... tataaaaa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...