从主时间线中删除影片剪辑中调用的声音
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”不存在。以上是关于从主时间线中删除影片剪辑中调用的声音的主要内容,如果未能解决你的问题,请参考以下文章