从主时间线中删除影片剪辑中调用的声音

Posted

技术标签:

【中文标题】从主时间线中删除影片剪辑中调用的声音【英文标题】:Removing Sounds Invoked within a MovieClip from main Time Line 【发布时间】:2012-07-16 17:56:20 【问题描述】:

当我在特定项目的时间线上前进时,我目前很难从播放中删除特定声音。

用户在时间轴上选择一个特定的项目,该项目将显示特定的影片剪辑,然后将在 MOUSE_DOWN 上播放特定的声音。

MOUSE_DOWN 的 eventListener 存在如下:

stage.addEventListener(MouseEvent.MOUSE_DOWN, sprayWater);
stage.addEventListener(MouseEvent.MOUSE_UP, stopWater);

function sprayWater(event:MouseEvent):void

    waterarm.gotoAndStop(2);
    trace("SPRAYING WATER");    


function stopWater(event:MouseEvent):void

    waterarm.water.gotoAndPlay("waterE");   

在“waterarm”的第 2 帧上是一个名为“water”的影片剪辑,其中包含水的动画和以下用于启动水声的代码:

var sfxWater:sfxwater;
var waterChannel:SoundChannel;
sfxWater = new sfxwater;
waterChannel = sfxWater.play();

在“waterE”帧上存在水消失的动画,代码为sfxWater.stop();

当用户在根时间轴上超过这一帧时,水的音效仍然保留在 MOUSE_DOWN 上,尽管此时时间轴上不再存在动画剪辑。

理想的结果是只有当该影片剪辑在主时间轴上可见时,才会在 MOUSE_DOWN 上播放单个声音并在 MOUSE_UP 上停止。如果有人可以提供任何帮助来阻止声音播放和删除此事件侦听器(如果可能,通过主时间线上的代码),我们将不胜感激。

问候, 达伦

【问题讨论】:

是否有问题:function stopWater(event:MouseEvent):void removeEventListener(MouseEvent.MOUSE_DOWN, sprayWater); removeEventListener(MouseEvent.MOUSE_UP, stopWater); waterarm.water.gotoAndPlay("waterE"); 感谢您的回复迈克尔。我没有在我的原始帖子中说明用户在“喷水”时不会从该框架移动,他们应该能够按自己喜欢的次数多次按下按钮,在根时间轴上有碰撞检测当 MOUSE_DOWN 时,确定他们是在其他地方前进还是停留在此帧上。 "flash 给了我一个数组,基本上说 'sprayWater' 不存在。"这是函数还是电影剪辑?您可能想查看自定义 dispatchEvent 类或在 mouse_down 中添加一行内容如下:if(movieclip)//if the movieclip exists //do stuff 我需要习惯 enterkey 提交 cmets... 抱歉,这是一个错字 - 数组本来就是错误的。 sprayWater 是功能,但是当我按住鼠标按钮时它仍然会触发。 . . 【参考方案1】:

如果您只想停止声音,为什么不使用SoundMixer.stopAll()

您可以在检查上述影片剪辑的visible 属性后在 MOUSE_UP 事件中使用它。

【讨论】:

感谢 loxxy 的回复。我们有其他声音通过它们自己的声道同时播放,因此 stopAll 会阻止它们继续播放。另一个问题是,即使以这种方式停止声音,一旦我越过时间线的这一部分,即使父影片剪辑不再在舞台上,MOUSE_DOWN 事件仍会被触发。 尝试在事件监听器使用完毕后立即移除它。您不能使用相同的声道对象播放多个声道并跟踪所有声道。你可能需要一个数组。 感谢 loxxy。我有几个不同的声道​​;一种用于画外音,一种用于一种音效,然后是这种。它们都是单独控制的,到目前为止它“一直”运行良好。我一直在尝试删除 eventListener(最好是从碰撞检测代码中),flash 给了我一个数组,基本上说“sprayWater”不存在。

以上是关于从主时间线中删除影片剪辑中调用的声音的主要内容,如果未能解决你的问题,请参考以下文章

在 AS3 中向子影片剪辑添加/删除事件侦听器

Flash AS3 从影片剪辑访问全局变量

如何从影片剪辑中调用对象

如何从子 Slider 影片剪辑访问父项中定义的对象

如何以静默方式预加载有声音的影片剪辑?

使用剪辑路径从圆圈中的 4 条 svg 线中删除 37px