2012-07-17 60 views
0

当我在特定项目上推进时间线时,我目前难以从播放中移除特定的声音。从主时间线中删除在影片剪辑中调用的声音

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

的事件监听用于MOUSE_DOWN它存在如下:

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是被称为“水”,其中包含的水的动画和下面的代码以启动水声的movieclip:

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

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

当用户在根时间轴上超出此帧时,尽管该时间线上不再存在动画片段,但水的音效仍保留在MOUSE_DOWN上。

理想的结果将是在MOUSE_DOWN上播放单个声音,并且仅当在主时间线上可见此动画片段时才停止在MOUSE_UP上。如果任何人可以提供任何帮助,以防止声音播放和删除此事件监听器(如果可能,通过主时间轴上的代码),这将不胜感激。

问候, 达伦

+0

有什么问题: function stopWater(event:MouseEvent):void { removeEventListener(MouseEvent.MOUSE_DOWN,sprayWater); removeEventListener(MouseEvent.MOUSE_UP,stopWater); waterarm.water.gotoAndPlay(“waterE”); } – Duke 2012-07-18 06:34:41

+0

感谢您的回复Michael。我没有在我原来的帖子中说过用户在“喷水”时没有从这个框架中移出,他们应该能够按下按钮多次,因为它们在根时间轴上有碰撞检测确定它们是否在别处进行或在MOUSE_DOWN时保持在该帧上。 – 2012-07-18 08:36:05

+0

“闪光灯给我一个阵列,基本上说'sprayWater'不存在。”是功能还是动画片段? 你可能想寻找到一个自定义的dispatchEvent类或添加在您的MOUSE_DOWN一条线,说是这样的: '如果(影片剪辑){//如果影片剪辑存在 //做的东西 }' 我需要以习惯enterkey提交评论... – Duke 2012-07-18 15:07:27

回答

1

如果停止声音是所有你想为什么不使用SoundMixer.stopAll()

检查所述动画片段的属性是否为visible后,可以在MOUSE_UP事件中使用它。

+0

感谢您的回复loxxy。我们通过自己的声道同时播放其他声音,因此stopAll阻止它们继续播放。 另一个问题是,即使通过这种方式停止声音,一旦我经过这部分时间轴,即使父级动画片段不在舞台上,MOUSE_DOWN事件仍然被触发。 – 2012-07-18 12:51:15

+0

尝试在使用结束后立即删除事件侦听器。您不能使用同一个声道对象播放多个声道并进行全部跟踪。你可能需要一个数组。 – loxxy 2012-07-18 13:06:34

+0

感谢loxxy。我有几个不同的声道​​;一个用于配音,一个用于一种音效,然后是这个。他们都是分开控制的,到目前为止“一直工作得很好”。 我一直在试图删除eventListener(最好从内部碰撞检测代码)闪光给我一个数组,基本上说'sprayWater'不存在。 – 2012-07-18 13:12:39