Просмотр полной версии : Многократное воспроизведение звука и остановка
Доброго времени суток.
Есть короткая мелодия, которая при нажатии кнопки начинает проигрываться до тех пор (или очень долго), пока второй раз не нажать эту кнопку.
Кривым языком начинающего (у меня) это должно выглядеть так
btn.addEventListener(MouseEvent.CLICK, playsound);
function playsound(e:MouseEvent):void {
if(temp==1)
{ sound.stop(0,3000);
temp=0;
}else{
sound.play(0,3000);
temp=1;
}
}
Но так оно естественно не работает :( Подскажите, как сделать такое действие. пробовал создавать и удалять листенеры с функцией многократного воспроизведения, но тоже к успеху не пришел
bublic_bicubic
24.04.2012, 19:49
не совсем правильно понимаете как работает Sound, SoundChannel.
рекомендую почитать документацию
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/media/Sound.html#play()
//var sound:Sound; звук, который надо воспроизводить
btn.addEventListener( MouseEvent.CLICK, toggleSound );
var soundChannel:SoundChannel = null;
function toggleSound( e:MouseEvent = null ):void {
if( soundChannel ) {
soundChannel.stop();
soundChannel = null;
} else {
soundChannel = sound.play( 0, 3000 );
}
}
Спасибо, работает :)
таким способом нельзя сделать воспроизведение сразу двух звуков или я не правильно понял?
bublic_bicubic
24.04.2012, 20:38
можно.
для каждого звука свой SoundChannel
так почему то не получается...
btn.addEventListener(MouseEvent.CLICK, playsound);
var soundChannel1:SoundChannel = null;
var soundChannel2:SoundChannel = null;
function playsound(e:MouseEvent):void {
if(temp==1)
{ soundChannel1.stop();
soundChannel1 = null;
soundChannel2 = sound2.play( 0, 3000 );
temp=0;
}else{
soundChannel2.stop();
soundChannel2 = null;
soundChannel1 = sound1.play( 0, 3000 );
temp=1;
}
}
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
если же после else будет
soundChannel1 = sound1.play( 0, 3000 );
soundChannel2.stop();
soundChannel2 = null;
то работать будет только один звук и выключить его не удастся
если же воспроизведение засунуть в одни скобки, а стоп в другие, то работают вместе и отключаются тоже
bublic_bicubic
25.04.2012, 11:38
не могу понять какое поведение требуется. нужно чтобы оба звука одновременно включались и выключались или попеременно?
попеременно. при нечетном нажатии включается sound1, при четном sound2
bublic_bicubic
25.04.2012, 17:05
Тогда в вашем коде при первом запуске функции playsound произойдет ошибка. Нужно либо при первом запуске обработать это, либо включать один из звуков в начале работы приложения.
В данном случае нужен один SoundChannel (так как звук проигрывается только один)
//var sound1:Sound, sound2:Sound; звуки, которые надо воспроизводить
btn.addEventListener( MouseEvent.CLICK, toggleSound );
var soundChannel:SoundChannel = null; // канал, изначально звук не проигрывается
var currentSound:Sound = null; // текущий звук, изначально не задан
function toggleSound( e:MouseEvent = null ):void {
switch ( currentSound ) {
case null: // если звук еще не проигрывается, выбираем первый звук
case sound2: // если проигрывается второй звук, выбираем первый звук
currentSound = sound1;
break;
case sound1: // если проигрывается первый звук, выбираем второй звук
currentSound = sound2
break;
}
if ( soundChannel ) { // если сейчас проигрывается звук, останавливаем его
soundChannel.stop();
}
soundChannel = currentSound.play( 0, 3000 ); // включаем проигрывание нового звука
}
спасибо Вам огромное :) очень помогли
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.