Звук завершен, а не выстрел (AS3) - PullRequest
0 голосов
/ 31 марта 2012

У меня есть немного затруднения.Мне нужно вызвать функцию внутри мувиклипа, как только закончится воспроизведение определенного звука.Звук воспроизводится через звуковой канал во внешнем классе, который я импортировал.Воспроизведение работает отлично.

Вот соответствующий код из моего внешнего класса, Sonus.

public var SFXPRChannel:SoundChannel = new SoundChannel;
var SFXPRfishbeg:Sound = new sfxpr_fishbeg();
var SFXPRfishmid:Sound = new sfxpr_fishmid();
var SFXPRfishend3:Sound = new sfxpr_fishend3();
var SFXPRfishend4:Sound = new sfxpr_fishend4()

public function PlayPrompt(promptname:String):void
{
    var sound:String = "SFXPR" + promptname;
    SFXPRChannel = this[sound].play();
}

Это вызывается через импорт в класс документа "osr", таким образом я получаю к нему доступв моем проекте через "osr.Sonus .---"

В моем проекте у меня есть следующая строка кода.

osr.Sonus.SFXPRChannel.addEventListener(Event.SOUND_COMPLETE, promptIsFinished);

function prompt():void
{
    var level = osr.Gradua.Fetch("fish", "arr_con_level");
    Wait(true);
    switch(level)
    {
        case 1:
            osr.Sonus.PlayPrompt("fishbeg");
        break;
        case 2:
            osr.Sonus.PlayPrompt("fishmid");
        break;
        case 3:
            osr.Sonus.PlayPrompt("fishend3");
        break;
        case 4:
            osr.Sonus.PlayPrompt("fishend4");
        break;
    }
}

function Wait(yesno):void
{
    gui.Wait(yesno);
}

function promptIsFinished(evt:Event):void
{
    Wait(false);
}

osr.Sonus.PlayPrompt (...)и gui.Wait (...) оба работают отлично, так как я использую их в других контекстах в этой части проекта без ошибок.

По сути, после завершения воспроизведения звука мне нужно Wait (false);вызывается, но слушатель события, похоже, не «слышит» событие SOUND_COMPLETE.Я где-то допустил ошибку?

Для записи, из-за структуры моего проекта, я не могу вызвать соответствующую функцию Wait (...) из Sonus.

Справка?

1 Ответ

0 голосов
/ 31 марта 2012

Event.SOUND_COMPLETE отправляется объектом soundChannel, который возвращается sound.play (). Это означает, что вы должны вызвать sound.play () сначала , а затем добавить слушателя, и вы должны явно добавить слушателя после каждый раз, когда вы вызываете play.

public function PlayPrompt(promptname:String):void
{
  var sound:String = "SFXPR" + promptname;
  SFXPRChannel = this[sound].play();
  SFXPRChannel.addEventListener(Event.SOUND_COMPLETE, promptIsFinished);
}

Тогда в promptIsFinished вы должны удалить слушателя.

function promptIsFinished(evt:Event):void
{
    evt.currentTarget.removeEventListener(evt.type, promptIsFinished);
    Wait(false);
}
...