PDA

Просмотр полной версии : Звук в цикле


softamore
25.01.2012, 16:13
Здравствуйте уважаемые форумчане, подскажите пожалуйста новичку. У меня есть цикл, по истечении которого (вместе с надписью "Время!") мне нужно чтобы проигрывался звук...

В начале я объявляю звук:
var zvuk1:Sound = new Sound();
zvuk1.attachSound("zvuk1_id");


Затем идёт цикл:


button1.onPress = function()
{
sec =getTimer()
}
_root.onEnterFrame = function()
{
sec2 = int((getTimer()-sec)/1000)
if(sec2<=9)
{
if(sec2<10)t1.text="0"+sec2
else if(sec2>=10) t1.text=sec2
}
else if(sec2=9) t1.text="Время!"
}


Куда бы я ни вставлял в него звук, он воспроизводится не по "завершению" цикла, т.е. при появлении надписи "Время!", а сразу же при переходе на кадр

P.S. Звук вставляю - zvuk1.start(0,0);

mooncar
25.01.2012, 16:50
Если для вас важно, чтобы по истечении 9 секунд проигрался звук и произошли еще какие-то действия, то лучше сделать так:
var zvuk1:Sound = new Sound();
zvuk1.attachSound("zvuk1_id");

setTimeout(soundIt, 9000, zvuk1);

function soundIt(snd:Sound)
{
snd.start();
//другие действия
}


И если что, в вашем коде sec изначально не определен, это произойдет только после нажатия кнопки. Хотя используется сразу, в обработчике onEnterFrame.
Если у вас в кадре стоит zvuk1.start(0,0); , то он сразу и будет запущен.

Вообще, логика запутанная, вот в этой части:
if(sec2<=9)
{
if(sec2<10)t1.text="0"+sec2
else if(sec2>=10) t1.text=sec2
}
Второе условие if(sec2>=10) не сработает никогда, поскольку главное условие if(sec2<=9).

Опишите еще раз задачу. Какую роль играет кнопка, укажите также.

Возможно, вот решение, которое вы ищете:

var zvuk1:Sound = new Sound();
zvuk1.attachSound('zvuk1_id');

var sec:Number ;

button1.onPress = button1Press;
this.onEnterFrame = thisEnterFrame;

function button1Press()
{
sec = getTimer();
}

function thisEnterFrame()
{

if (sec)
{
var sec2:Number = getTimer();
var deltaSec:Number = int((sec2 - sec) / 1000);

if (deltaSec < 9)
{
t1.text = deltaSec;
}

if (deltaSec == 9)
{
t1.text = 'Время!'
zvuk1.start();
}
}
}


Здесь по нажатию начинается проверка, с индикацией времени. Как только после нажатия время станет равным 9 сек., проиграется звук и появится надпись "Время".

softamore
25.01.2012, 23:46
Спасибо большое за помощь, только осталась одна проблема, звук (он довольно короткий) проигрывается раз за разом...

mooncar
26.01.2012, 00:01
Да, недоглядел.
Замените последнее условие на:
if (deltaSec == 9)
{
delete sec;
t1.text = 'Время!'
zvuk1.start();
}

Дело в том, что после удаления sec здесь прекращается проверка и звук проиграется только один раз.
Проверка будет выполняться если выполняется условие if (sec), а оно будет истинным только после нажатия кнопки, когда определится переменная.

softamore
26.01.2012, 19:24
mooncar спасибо ещё раз огромное, теперь всё работает как надо...