声音完全不发射(AS3)

时间:2012-03-30 21:00:25

标签: actionscript-3 flash actionscript addeventlistener flash-cs5.5

我有点窘迫。一旦特定声音播放完毕,我需要在MovieClip中调用一个函数。声音是通过我导入的外部类中的声道播放的。播放效果很好。

以下是我的外部课程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(...)函数。

帮助?

1 个答案:

答案 0 :(得分: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);
}