声音完全不烧(AS3)

问题描述:

我有点尴尬。一旦特定的声音播放完成,我需要在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(...)函数。

帮助?

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