Звук временной шкалы Flash не останавливается при навигации - PullRequest
3 голосов
/ 16 декабря 2009

У меня есть фрагмент Flash, который имеет одну основную временную шкалу, которая загружает разные видеоклипы и разные разделы этой основной временной шкалы.

На этих встроенных видеоклипах в пределах основной временной шкалы есть звуки, прикрепленные к встроенным временным шкалам видеоклипов, для которых установлено значение «Поток». Они должны быть на временной шкале, чтобы они правильно синхронизировались (я не могу загрузить звуки программно).

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

Я не могу добавить остановку всех звуков, потому что навигация по фильму управляется с внешнего проигрывателя, над которым у меня нет контроля (в основном внешний проигрыватель просто вызывает gotoAndStop («myFrame») в фильме.) .

Есть какие-нибудь идеи, почему временная шкала не работает так, как предполагалось?

Спасибо.

Ответы [ 9 ]

7 голосов
/ 16 декабря 2009

Два возможных решения:

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

import flash.media.SoundMixer;

SoundMixer.stopAll()

2. Сделайте это на мувиклипе, в котором есть звуки, от которых вы хотите избавиться:

var myMovieClip:MovieClip;

var muteTransform:SoundTransform = new SoundTransform();
muteTransform.volume = 0;
myMovieClip.soundTransform = muteTransform;

Звуки временной шкалы во Flash - это боль! Это глючит, и Adobe должен это исправить, но они, вероятно, не будут.

1 голос
/ 15 января 2011

Действительно, в SW3, скомпилированном в AS3, глючит, чтобы избежать большого количества звуков на временной шкале, которые не должны располагаться в кадре 1 (кадр 2 подойдет) из любых встроенных шкал времени ...

0 голосов
/ 26 сентября 2014

SoundMixer.soundTransform = новый SoundTransform (1, 0); // громкость, панорамирование

0 голосов
/ 12 июня 2014

Я бы попытался прослушать событие removeFromStage в удаляемом мувиклипе (я полагаю, что на временной шкале в той точке, к которой вы перемещаетесь, нет экземпляра этого клипа), а затем использовать MovieClip.SoundTransform, как указано выше.

0 голосов
/ 13 июня 2012

Еще одна простая вещь, которую вы можете сделать, это добавить ключевой кадр к слою, где аудио потоки (в мувиклипе, где заканчивается аудио). Если вы хотите перейти в основное время к другому мувиклипу, сделайте предыдущий аудио мувиклип, чтобы перейти к тому ключевому кадру, где заканчивается аудио, а затем воспроизведите следующий мувиклип ...

Например: если текущий видеоклип, который воспроизводит звук, имеет имя экземпляра: mc_1 (на основной временной шкале) и если mc_2 - это последовательный видеоклип, который будет воспроизводиться.

В таком случае вы можете остановить звук в mc_1 с помощью

mc_1.gotoAndStop("frameWhereAudioEnds");

начать следующий аудиоклип.

mc_2.play();
0 голосов
/ 23 июня 2011

Я нашел полезным этот обходной путь:

public function stopAllMovies(mov:MovieClip, mute:Boolean=false):void{
    //trace("STOPING MOVIE "+mov);
    mov.stop();
    if(mute) {
        var muteTransform:SoundTransform = new SoundTransform(0.0);
        mov.soundTransform = muteTransform;
    }
    for (var i:uint=0;i<mov.numChildren;i++){
        var m = mov.getChildAt(i);
        if(m is MovieClip){
            if(mute) m.soundTransform = muteTransform;
            m.stop();
            stopAllMovies(m);
        }
    }
}
0 голосов
/ 12 сентября 2010

Разбейте анимацию на временной шкале на отдельные фрагменты ролика.

0 голосов
/ 13 июля 2010

создайте файл глобальной переменной myglobal.as, в этом файле определите

package {
  public class MyGlobal {
    public static var cycle:int;
  }
}

и используйте import myglobal в кадре 1 главной временной шкалы.

myglobal.count +=1; // fist thing you do on frame 1.

if(myglobal.count==1){
  sound.play();
};

END , которое должно работать только один раз.

0 голосов
/ 16 декабря 2009

Одна вещь, которую вы можете сделать, это иметь объект, который управляет всеми звуками (например, класс SoundManager). Он знает все звуки, которые играют. Когда вы переходите в новый раздел фильма, первое, что вы можете сделать, это попросить SoundManager остановить все звуки.

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