![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Здравствуйте, давно сюда не заходил - все дела... В универе попросили сделать презентации по темам, да еще и не просто, а со звуком. Сел вечером создавать функцию проигрывания звука. Нажимался клип - звук проигрывался, нажимался снова - звук останавливался. Затем я попробовал сделать два клипа и два звука. Все заработало. Но вот не так, как мне надо. При нажатии на первый клип срабатывал первый звук. При нажатии на второй клип первый звук затыкался, второй не стартовал.
Можно ли как-то сделать, чтобы при нажатии на второй клип проигрывался второй звук, а первый переставал играть? Заранее спасибо Вот код: var vsound:Sound = new Sound(); function startStopMus(nameSnd){ if (!onOff){ onOff = true; vsound.attachSound(nameSnd); vsound.start(nameSnd); } else { onOff = false; vsound.stop(); } } btn1.onRelease = function(){ startStopMus("1.mp3"); } btn2.onRelease = function(){ startStopMus("2.mp3"); }
__________________
тут я |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 950
|
создавайте два обьекта Sound , и с каждым работайте.
|
|
|||||
|
Спасибо за идею, но ежели этих звуков больше, чем два? Скажем, десятка два-три. Конечно, я сейчас попробую что-то сварганить с двумя объектами, но хотелось бы услышать еще варианты решения)
Добавлено через 3 часа 44 минуты немного переделал функцию. Теперь останавливается одна и играет вторая. Вот только вообще остановить проигрывание нельзя - обязательно играет какая-то из мелодий: var vsound:Sound = new Sound(); function startStopMus(nameSnd, nmBtn) { if (!onOff){ vsound.stop(); nmBtn.onOff = true; vsound.attachSound(nameSnd); vsound.start(nameSnd); } else { nmBtn.onOff = false; vsound.stop(); } } btn1.onRelease = function() { startStopMus("1.mp3", btn1); } btn2.onRelease = function() { startStopMus("2.mp3", btn2); }
__________________
тут я Последний раз редактировалось КорДум; 21.10.2009 в 23:55. |
|
|||||
|
примерно вот так:
var mp3:Array = new Array("sound", "sound1", ... "sound20");// Sound`s лежат в библиотеке и соответственно инициализированны для экспорта в ActionScript var btn:Array = new Array(btn1, btn2, ... btn20);//Button`s лежат на рабочем столе в первом фрэйме function startStopMus(btnID){ var vsound:Sound = new Sound(); vsound.attachSound(mp3[btnID]); vsound.start(mp3[btnID]); vsound.stop(mp3[btnID - 1]); vsound.stop(mp3[btnID + 1]); } for(var i = 0; i < btn.length; i++){ var item = btn[i]; item.ID = i; item.onRelease = function(){ startStopMus(this.ID); } } |
|
|||||
|
amexdesign, интересная реализация. Только вот в ней, если нажать несколько раз на одну и ту же кнопку, звук, запускаемый с этой кнопкой, дублируется и накладывается сам на себя...
Можно составить вот такую конструкцию: ? Знаю, что в скобках неправильное выражение, но можно ли его как-то примерно написать?
__________________
тут я Последний раз редактировалось КорДум; 22.10.2009 в 00:50. |
|
|||||
|
тогда избигаем это следующим образом:
var mp3:Array = new Array("sound", "sound1", ... "sound20");// Sound`s лежат в библиотеке и соответственно инициализированны для экспорта в ActionScript var btn:Array = new Array(btn1, btn2, ... btn20);//Button`s лежат на рабочем столе в первом фрэйме var count:Number = -1; function startStopMus(btnID){ var vsound:Sound = new Sound(); vsound.attachSound(mp3[btnID]); vsound.start(mp3[btnID]); vsound.stop(mp3[btnID - 1]); vsound.stop(mp3[btnID + 1]); } for(var i = 0; i < btn.length; i++){ var item = btn[i]; item.ID = i; item.onRelease = function(){ if (count != this.ID){ count++; startStopMus(this.ID); } } } |
|
|||||
|
и опять промах) Теперь звук не останавливается вообще - это раз. И если проиграть первый звук, затем второй, а после этого снова первый - первый звук можно снова дублировать - это два) Сейчас попробую флагами одолеть это...
Обязательно отпишу, даже если не получилось Добавлено через 5 минут отлично, заработало! Теперь ваша функция приобрела следующий вид: function startStopMus(btnID){ var vsound:Sound = new Sound(); vsound.attachSound(mp3[btnID]); if (!btn[btnID].enbl){ vsound.start(mp3[btnID]); btn[btnID].enbl = true; } else { vsound.stop(mp3[btnID]); btn[btnID].enbl = false; } vsound.stop(mp3[btnID - 1]); vsound.stop(mp3[btnID + 1]); btn[btnID - 1].enbl = false; btn[btnID + 1].enbl = false; } Добавлено через 13 часов 31 минуту хе, добавил на сцену еще парочку кнопкоклипов и в библиотеку парочку звуков, решил проверить свою догадку. Оказалось, точно - если запустить первый звук, а затем четвертый - они накладываются друг на друга. Вот здесь недочет: vsound.stop(mp3[btnID - 1]); vsound.stop(mp3[btnID + 1]); btn[btnID - 1].enbl = false; btn[btnID + 1].enbl = false; function startStopMus(btnID){ var vsound:Sound = new Sound(); vsound.attachSound(mp3[btnID]); if (!btn[btnID].enbl){ vsound.start(mp3[btnID]); btn[btnID].enbl = true; } else { vsound.stop(mp3[btnID]); btn[btnID].enbl = false; } if (btnID != btn.length-1){ for(j = btnID+1; j <= btn.length-1; j++){ vsound.stop(mp3[j]); btn[j].enbl = false; } } if (btnID != 0){ for(j = btnID-1; j >= 0; j--){ vsound.stop(mp3[j]); btn[j].enbl = false; } } }
__________________
тут я Последний раз редактировалось КорДум; 22.10.2009 в 16:22. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|