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 내에서 적절한 대기 (...) 기능을 호출 할 수 없습니다.

도움 말?

답변

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)가 참조하는 함수가 들어 있습니다. 어떤 시점에서 어느 영화 클립이 그 대기 (거짓) 신호의 대상이 될지를 알 수있는 방법이 없으므로 문제입니다. 그래도 고마워. – CodeMouse92

관련 문제