2012-07-17 41 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

相關問題