2013-03-06 22 views
0

我已經看到了很多foruns的嘗試使一個聲音運行其他Event.SOUND_COMPLETE在AS3

在LoaderS1後,這種情況下LoaderS2後...

有人可以幫助,這是我的代碼。 ..我不知道該怎麼做...:S

這是一個程序來顯示2圖像,用戶需要選擇正確的一個後聽聲音。

這個想法是在我加載2個圖像後,我將運行LoaderS1將運行,並且HL_Left將使矩形環繞圖片以突出圖像,並且當完成時他將再現第二個soun LoaderS2。

這就是我想做的事情...需要幫助和快速...

import flash.display.Loader; 
import flash.net.URLRequest; 
import flash.events.Event; 

var Img_Sd:Array = new Array(5); 
var Escolhas:Array = new Array(5); 
var Respostas:Array = new Array(0,1,0,1,0) 

var Resultado:Number = 0; 
var Pos:Number = 0; 

var i:Number = 0; 
var b:Number = 0; 

var urlE:String; 
var urlD:String; 
var urlS1:String; 
var urlS2:String; 
var urlS3:String; 

var Loader_ESQ:Loader = new Loader(); 
var Loader_DIR:Loader = new Loader(); 
var Loader_S1:Sound = new Sound(); 
var Loader_S2:Sound = new Sound(); 
var Loader_S3:Sound = new Sound(); 

var pasta_SND:String = "Sons/"; 
var pasta_IMG:String = "Images/"; 
var num_Imag:Number = 0; 
var string_aux:String; 
var flag:Number = 0; 


//Preenchimento do array com a informação dos ficheiros (Imagens e Sons) 
for (i=0; i<=4; i++) 
{ 

     Img_Sd[i] = [((i+1)+"E"),((i+1)+"D"),17,18,20]; 
} 

//Event Listeners para supervisionar o estado dos botões 
BT_EscolhaDIR.addEventListener(MouseEvent.CLICK, ClickDir); 
BT_EscolhaESQ.addEventListener(MouseEvent.CLICK, ClickESQ); 

//BT_Reeniciar.addEventListener(MouseEvent.CLICK, ClickRe); 

LoadImg(); 
//Pos = Pos+1; 

function ClickESQ(event:MouseEvent): void 
{ 
    Escolhas[Pos]=0; 
    Pos = Pos+1; 
    LoadImg(); 
} 

function ClickDir(event:MouseEvent): void 
{ 

    Escolhas[Pos]=1; 
    Pos=Pos+1; 
    LoadImg(); 
} 

function audioComplete(e:Event): void 
{ 
    Loader_S2.play(); 
    HL_Left.visible=false; 
} 


function LoadImg() 
{ 
    if (Pos<5) 
    { 
     urlE = pasta_IMG + Img_Sd[Pos][0] +".png"; 
     urlD = pasta_IMG + Img_Sd[Pos][1] +".png"; 

     Loader_ESQ.load(new URLRequest(urlE)); 
     Loader_DIR.load(new URLRequest(urlD)); 


     //Pos = Pos + 1; 


     EscolhaESQ_MC.addChild(Loader_ESQ); 
     EscolhaDIR_MC.addChild(Loader_DIR); 
     HL_Left.visible=true; 
     LoadSnd(); 

     //setTimeout(audioComplete, Loader_S1.length); 
    } 

    if (Pos == 5) 
    { 
     BT_EscolhaDIR.enabled = false; 
     BT_EscolhaESQ.enabled = false; 
     for (b=0;b<=4;b++) 
     { 
      if (Escolhas[b]==Respostas[b]) 
      { 
       Resultado = Resultado + 1; 
      } 
      trace("Escolha",Escolhas[b],":Resposta",Respostas[b],"-",Resultado); 
     } 
     Pos=6; 
    } 
} 

function LoadSnd() 
{ 
    urlS1= pasta_SND + Img_Sd[Pos][2] +".mp3"; 
    urlS2= pasta_SND + Img_Sd[Pos][3] +".mp3"; 
    urlS3= pasta_SND + Img_Sd[Pos][4] +".mp3"; 

    Loader_S1.load(new URLRequest(urlS1)); 
    Loader_S2.load(new URLRequest(urlS2)); 
    Loader_S3.load(new URLRequest(urlS3)); 
    Loader_S1.play(); 
    Loader_S1.addEventListener(Event.SOUND_COMPLETE, audioComplete); 
} 

回答

5

Sound類不會調度Event.SOUND_COMPLETE事件。您正在尋找的是SoundChannel班(http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundChannel.html)。

Sound類的play方法返回一個SoundChannel實例,所以你想做的事是:

var s1Channel:SoundChannel = Loader_S1.play(); 
s1Channel.addEventListener(Event.SOUND_COMPLETE, audioComplete); 
+0

非常感謝......問題解決了...... 馬塞拉你值得擁有2大吻的.. 馬塞拉是巴西人的名字!? 感謝您的快速回復... – 2013-03-07 18:59:37

+0

我的榮幸。這實際上是一個西班牙名字;意大利語拼寫時有兩個'L' – Marcela 2013-03-08 21:37:39

+0

我還有另一個問題,我把它作爲對我的問題的回覆... – 2013-03-12 23:12:43