0

我有點尷尬。一旦特定的聲音播放完成,我需要在MovieClip中調用一個函數。聲音是通過我導入的外部課程中的聲道播放的。播放工作正常。聲音完全不燒(AS3)

這是我外部類Sonus的相關代碼。

public var SFXPRChannel:SoundChannel = new SoundChannel; 
var SFXPRfishbeg:Sound = new sfxpr_fishbeg(); 
var SFXPRfishmid:Sound = new sfxpr_fishmid(); 
var SFXPRfishend3:Sound = new sfxpr_fishend3(); 
var SFXPRfishend4:Sound = new sfxpr_fishend4() 

public function PlayPrompt(promptname:String):void 
{ 
    var sound:String = "SFXPR" + promptname; 
    SFXPRChannel = this[sound].play(); 
} 

這是通過在文檔類「OSR」進口調用,因此,我通過訪問它在我的項目「osr.Sonus ---」

在我的項目,我有以下代碼行。

osr.Sonus.SFXPRChannel.addEventListener(Event.SOUND_COMPLETE, promptIsFinished); 

function prompt():void 
{ 
    var level = osr.Gradua.Fetch("fish", "arr_con_level"); 
    Wait(true); 
    switch(level) 
    { 
     case 1: 
      osr.Sonus.PlayPrompt("fishbeg"); 
     break; 
     case 2: 
      osr.Sonus.PlayPrompt("fishmid"); 
     break; 
     case 3: 
      osr.Sonus.PlayPrompt("fishend3"); 
     break; 
     case 4: 
      osr.Sonus.PlayPrompt("fishend4"); 
     break; 
    } 
} 

function Wait(yesno):void 
{ 
    gui.Wait(yesno); 
} 

function promptIsFinished(evt:Event):void 
{ 
    Wait(false); 
} 

osr.Sonus.PlayPrompt(...)和gui.Wait(...)都完美地工作,就像我在其他情況下的項目的一部分使用它們沒有錯誤。基本上,在聲音播放結束後,我需要Wait(false);被調用,但事件監聽器似乎並沒有「聽到」SOUND_COMPLETE事件。我在某個地方犯了錯嗎?

爲了記錄,由於我的項目結構,我無法從Sonus內部調用適當的Wait(...)函數。

幫助?

回答

0

Event.SOUND_COMPLETE由sound.play()返回的soundChannel對象分派。這意味着你必須先調用sound.play()第一個然後添加監聽器,並且你必須在之後明確添加監聽器,每次你調用play時

public function PlayPrompt(promptname:String):void 
{ 
    var sound:String = "SFXPR" + promptname; 
    SFXPRChannel = this[sound].play(); 
    SFXPRChannel.addEventListener(Event.SOUND_COMPLETE, promptIsFinished); 
} 

然後在promptIsFinished中應該刪除偵聽器。

function promptIsFinished(evt:Event):void 
{ 
    evt.currentTarget.removeEventListener(evt.type, promptIsFinished); 
    Wait(false); 
} 
+0

不幸的是,正如我所說的,我不能在Sonus內部調用Wait(false)。我想我將不得不在項目本身中使用類似的功能來自己玩這個。謝謝你們一樣。 – CodeMouse92 2012-03-31 00:47:57

+0

你不一定非得這樣做。您在該switch語句中調用PlayPrompt,並且您也可以從該範圍訪問SFXPRChannel,因此您可以在switch語句內調用PlayPrompt,然後在執行切換後立即添加偵聽器。 – scriptocalypse 2012-03-31 03:46:13

+0

嗯,不,因爲我的項目是這樣設置的,段中的影片剪輯被隱藏起來並根據需要顯示在舞臺上。每個人都有一個「gui」對象,持有Wait(false)引用的函數。我無法確切地知道在任何給定點的哪個動畫片段將成爲該等待(錯誤)信號的目標,因此,這個問題。謝謝,不過。 – CodeMouse92 2012-03-31 04:08:05