我有一个Flash片段,它有一个主时间轴,可以加载不同的影片剪辑和主时间轴的不同部分。
在主时间轴中的那些嵌入式影片剪辑上附加到设置为“流”的嵌入式动画片段时间轴的声音。它们必须在时间轴上才能正确同步(我无法以编程方式加载声音)。
我遇到的问题是,当我导航到主时间轴上的新部分时,我导航离开的时间轴上嵌入的动画片段消失了,但声音继续播放。一旦我离开,我无法弄清楚如何让声音停止。
我无法添加停止所有声音,因为电影的导航是由我无法控制的外部播放器控制的(基本上外部播放器只是在电影上调用gotoAndStop(“myFrame”)。)
时间轴听起来的任何想法都不像它想的那样?
感谢。
答案 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.aspackage {
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); //音量,平底锅