2009-12-16 68 views
3

我有一个Flash片段,其中有一个主要时间线,用于加载不同的影片剪辑和该主要时间线的不同部分。Flash时间轴声音不停止导航

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

我遇到的问题是,当我导航到主时间轴上的新节时,嵌入在我导航离开的时间线上的动画片段消失,但声音继续播放。我不知道如何让我的导航离开后停止声音。

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

任何想法为什么时间线听起来不像它假设的那样工作?

谢谢。

+0

您使用的是AS2还是AS3? – milesmeow 2009-12-16 19:11:54

+0

我正在使用ActionScript 3. – 2009-12-16 19:15:07

回答

0

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

6

两个可能的解决方案:

1.本应停止所有声音当前播放。如果您需要诸如背景音乐之类的东西在转出后继续播放,则可能无法为您工作。这是一种解决方法。

import flash.media.SoundMixer; 

SoundMixer.stopAll() 

2.做这个有声音,你想摆脱的影片剪辑:

var myMovieClip:MovieClip; 

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

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

+0

这可能实际上有效,但在时间轴上的那一点,电影不再存在,所以我无法解决它。 由于必须构建时间线的性质,stopAllSounds将不起作用。谢谢你的建议。 – 2009-12-16 20:23:09

+0

我在动画工作室工作,人们一直在遇到这个问题。通常的解决方案是创建一个新的时间线图层,在下面(或上面)有一个流式声音帧,这个层不是正确的。这个额外的声音层应该使用无声的音频片段,这可能是时间线的持续时间,而不仅仅是循环的事情。他们称之为'死声音'轨道。我没有验证这个工作。但是,我也无法得到这里提供的解决方案为我工作,要么:/ – Pup 2010-09-12 12:38:41

+0

myMovieClip.soundTransform = new SoundTransform(0.0); – Oldes 2011-06-23 14:18:55

0

做一个全局变量文件myglobal.as,在该文件中定义主时间轴的第1帧

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

和使用进口myglobal。

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

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

END应该工作只有一次发挥它。

0

将时间线动画分解为单独的动画片段。

1

越野车确实是在AS3编译SWF,以避免他们很多时间安排听起来不应该在任何嵌入式时间表的第1帧(帧2也可以)座位...

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

但是,我们没有看到/听到的东西并不意味着没有发生什么令人讨厌的内眼镜......更好地看到这种行为由Adobe ASAP修复 – Oldes 2011-06-23 14:42:13

0

您可以做的另一件简单的事情是将关键帧添加到音频流所在的层(音频结尾处的动画片段内)。当您想要将主要时间导航到不同的动画片段时,请将以前的音频动画片段跳转到音频结束的关键帧,然后播放下一个动画片段...

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

在这种情况下,你可以通过使用

mc_1.gotoAndStop("frameWhereAudioEnds"); 

开始下一个声音影片剪辑停止mc_1的声音。

mc_2.play(); 
0

我会尝试监听对要出门的影片剪辑的removedFromStage事件(我假设没有在你导航到该点的时间线影片剪辑实例),然后使用影片剪辑。 SoundTransform如上。

0

SoundMixer.soundTransform = new SoundTransform(1,0); // volume,pan

+1

我认为这会对op和更多的访问者更有帮助,何时你给你的内涵添加一些解释。您可以使用帖子下方的修改链接进行操作。 – reporter 2014-09-26 11:46:02