-1

I already saw a lot of foruns to try make one sound run after the other

In this case LoaderS2 after LoaderS1...

Can someone help, here is my code... i dont know what to do anymore... :S

this is a program to show 2 images and the user need to chose the right one after listen the sounds.

The idea is after i load the 2 images i will run LoaderS1 will run and HL_Left will make a rectangle arround the picture to highlight the image and when finish he will reproduct the second soun LoaderS2.

This is what i want to do... need help and fast...

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);
}

1 Answers1

4

The Sound class does not dispatch the Event.SOUND_COMPLETE event. What you're looking for is the SoundChannel class (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/SoundChannel.html).

The play method of the Sound class returns a SoundChannel instance, so what you want to do is:

var s1Channel:SoundChannel = Loader_S1.play();
s1Channel.addEventListener(Event.SOUND_COMPLETE, audioComplete);
Marcela
  • 3,728
  • 1
  • 15
  • 21