导航时闪光时间线声音不停止

时间:2009-12-16 19:00:43

标签: flash actionscript-3 audio

我有一个Flash片段,它有一个主时间轴,可以加载不同的影片剪辑和主时间轴的不同部分。

在主时间轴中的那些嵌入式影片剪辑上附加到设置为“流”的嵌入式动画片段时间轴的声音。它们必须在时间轴上才能正确同步(我无法以编程方式加载声音)。

我遇到的问题是,当我导航到主时间轴上的新部分时,我导航离开的时间轴上嵌入的动画片段消失了,但声音继续播放。一旦我离开,我无法弄清楚如何让声音停止。

我无法添加停止所有声音,因为电影的导航是由我无法控制的外部播放器控制的(基本上外部播放器只是在电影上调用gotoAndStop(“myFrame”)。)

时间轴听起来的任何想法都不像它想的那样?

感谢。

9 个答案:

答案 0 :(得分:7)

两种可能的解决方案:

<强> 1。这应该会停止当前播放的所有声音。如果您在转换后需要背景音乐等内容继续播放,可能不适合您。这是一种解决方法。

import flash.media.SoundMixer;

SoundMixer.stopAll()

<强> 2。在要删除声音的MovieClip上执行此操作:

var myMovieClip:MovieClip;

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

Flash中的时间轴声音很痛苦!这是错误的,Adobe应该修复它,但它们可能不会。

答案 1 :(得分:1)

Bug确实在AS3编译的SWF中避免了很多时间轴声音不应该位于任何嵌入时间轴的第1帧(第2帧都会这样做)......

答案 2 :(得分:0)

您可以做的一件事是拥有一个管理所有声音的对象(例如:SoundManager类)。它知道正在播放的所有声音。当您转到电影的新部分时,您可能想要做的第一件事就是让SoundManager停止所有声音。

答案 3 :(得分:0)

在该文件中定义

创建一个全局变量文件myglobal.as
package {
  public class MyGlobal {
    public static var cycle:int;
  }
}

并在主时间轴的第1帧上使用import myglobal。

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

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

END 应该只能播放一次。

答案 4 :(得分:0)

将时间轴动画分解为单独的MovieClip。

答案 5 :(得分:0)

我发现这个解决方法很有用:

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);
        }
    }
}

答案 6 :(得分:0)

您可以做的另一件简单的事情是将关键帧添加到音频流的图层(在影片剪辑中,音频结束的位置)。如果要在主时间导航到其他动画片段,请将上一个音频动画片段跳转到音频结束的关键帧,然后播放下一个动画片段......

例如:如果播放音频的当前动画片段具有实例名称:mc_1(在主时间轴上),并且mc_2是将要播放的连续动画片段。

在这种情况下,您可以使用

停止mc_1中的声音
mc_1.gotoAndStop("frameWhereAudioEnds");

启动下一个音频动画片段。

mc_2.play();

答案 7 :(得分:0)

我会尝试在动画片段上侦听removeFromStage事件(我假设在您导航到的时间点时间线中没有该影片剪辑的实例),然后使用上面的MovieClip.SoundTransform。

答案 8 :(得分:0)

SoundMixer.soundTransform = new SoundTransform(1,0); //音量,平底锅