2015-10-07 157 views
0

好的,我是一個總閃光as3 noob,所以這一定很容易解決我猜。我正在用閃存cs6製作一個帶有錄製聲音的音板,非常簡單:1個畫面,10個按鈕,每個按鈕都會發出不同的聲音。問題是這些聲音重疊,所以我需要的是當我按下一個按鈕時,其他聲音停止播放。有人請嗎?FLASH AS3聲音重疊

回答

0

請參閱Sound類中的play()方法文檔,它將返回一個SoundChannel對象,該對象具有stop()方法。

所以你可以那樣做(示意圖):

var currentChannel:SoundChannel; 

button1.addEventListener(MouseEvent.CLICK, onButtonClick); 
button2.addEventListener(MouseEvent.CLICK, onButtonClick); 
button3.addEventListener(MouseEvent.CLICK, onButtonClick); 

function onButtonClick(event:MouseEvent):void 
{ 
    /* provided you have implemented selectSoundByButton func somewhere */ 

    const sound:Sound = selectSoundByButton(event.currentTarget); 

    if (currentChannel) { 
     currentChannel.stop(); 
    } 

    currentChannel = sound.play(); 
} 

更詳細的描述:

比方說,你想創建另一個閃光燈屁按鈕的應用程序。這就是你必須做的:

  1. 創建一個按鈕符號,將它添加到舞臺並在屬性選項卡中給它一個實例名稱。我們稱之爲myButton
  2. 使用file-> import將聲音添加到庫中
  3. 將此聲音導出到actionscript。右鍵單擊庫中的聲音,在「actionscript選項卡」上選中「導出爲動作腳本」,「在幀1中導出」。填充「Class」輸入,並輸入聲音所需的類名(例如MySound)
  4. 然後,您必須觸發單擊按鈕上的聲音播放。所以,你應該把下面的代碼到你的flash影片的第一幀:

    SoundMixer.stopAll(); 
    

    如果你是:

    import flash.media.Sound; 
    import flash.media.SoundChannel; 
    import flash.events.MouseEvent; 
    
    var currentChannel:SoundChannel; 
    const mySound:Sound = new MySound(); 
    
    function onClick(e:MouseEvent):void {  
        if (currentChannel) { 
         currentChannel.stop(); 
        } 
        currentChannel = mySound.play(); 
    } 
    
    myButton.addEventListener(MouseEvent.CLICK, onClick); 
    
+0

嘿男人謝謝你的回答。我真的不知道你的意思,所以我們說只有一個按鈕。你能告訴我該做什麼嗎?每當我點擊按鈕聲音重新開始但沒有重疊時,我在哪裏放這個代碼。 – AdamXpelled

+0

好的。我會以更詳細的方式重寫它。 – leetwinski

+0

我跟着步驟,但無濟於事。按鈕現在被稱爲「myButton」,並且聲音的類(名稱爲「goodmorning」)被稱爲「MySound」,因此我可以粘貼代碼而不做任何更改,但不起作用。每次我點擊一個新的聲音來。告訴我,在AS2中更容易嗎?也許我可以重新開始。我感謝你的幫助兄弟。 – AdamXpelled

-1

播放聲音之前,這對每個按鈕的代碼添加直接從Adobe Flash中的時間線添加動作,不需要導入類。如果你從一個IDE工作像的FlashDevelopFlashBuilder,該代碼添加到開始(Package {後):

import flash.media.SoundMixer; 

編碼愉快!

編輯:More info on the SoundMixer class

+0

它解決PO問題,但通過提供潛在的另一個問題。投票下來。 SoundMixer.stopAll();將停止當前播放的任何聲音,而不僅僅是問題中提到的聲音。如果PO後來需要背景音樂呢?或者如果其他聲音應該在其他地方播放?這裏提供的解決方案會產生比解決問題更多的問題。 – BotMaster

+0

知道這不是一個壞的功能。我已經建議了比這更深入的東西(比如將按鈕聲音存儲到變量並在播放下一個聲音之前停止當前聲音)。 但是,OP公佈他們是一個noob,我懷疑他們正在添加背景音樂。對於不知道或想要編碼的人來說,這是一個快速解決方案。 –