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(...)両方とも私がエラーなしでプロジェクトのこの部分では他の文脈でそれらを使用して、完璧に動作。

基本的に、サウンドが再生された後、私は待機(偽)が必要です。イベントリスナーはSOUND_COMPLETEイベントを "聞いている"ようには見えません。私はどこかで間違いを犯しましたか?

記録のために、私のプロジェクト構造のため、Sonus内から適切なWait(...)関数を呼び出すことができません。

ヘルプ?

答えて

0

event.SOUND_COMPLETEは、sound.play()によって返されるsoundChannelオブジェクトによって送出されます。これは、sound.play()を最初にと呼び、リスナーを追加する必要があります。再生するたびに、の後にリスナーを明示的に追加する必要があることを意味します。

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

次に、リスナーを削除する必要があります。

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

残念ながら、私が言ったように、私はSonusの内側からWait(false)を呼び出すことはできません。私はプロジェクト自体の中で同様の機能を使って自分自身を演奏しなければならないだろうと思う。すべて同じようにありがとう。 – CodeMouse92

+0

あなたは必ずしもそうである必要はありません。あなたはそのswitch文の中でPlayPromptを呼び出しています。そのスコープからSFXPRChannelにアクセスすることもできますので、switch文の中でPlayPromptを呼び出してから、スイッチが実行された直後にリスナーを追加することができます。 – scriptocalypse

+0

さて、いいえ、私のプロジェクトは、セグメントが隠され、必要に応じてステージに表示されるムービークリップになるように設定されているためです。それぞれには "gui"オブジェクトがあり、Wait(false)が参照する関数を保持しています。どの時点でどのムービークリップがそのWait(false)信号のターゲットになるのかを知る方法がないので、この問題です。しかし、ありがとう。 – CodeMouse92

関連する問題