![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 11
|
На кнопке стоит функция - StopAllSounds(); Она останавливает любой звук в ролике, жестко обрывая его. Можно ли сделать так, чтобы при нажатии на кнопку звук не обрывался, а затухал плавно?
|
|
|||||
|
Модрон-ветеринар
|
btn.onRelease = function () { fadeout = setInterval (fadeOut , 100); }; function fadeOut () { if (!allSound) { allSound = new Sound();//скобки пусты, значит этот экземпляр класса Sound влияет на весь звук ролика } if (count == undefined) { count = 10; } if (count >= 0) { allSound.setVolume(count * 10); count--; } else { clearInterval(fadeout); } } Если нужно опять стартовать какой-то звук, то нужно будет поднять всю громкость до 100 объекта allSound и только тогда стартовать нужный звук. Если так поступать нежелательно, то нужна несколько другая схема работы со звуком, зависящая от конкретных обстоятельств - откуда и как стартуются звуки, сколько их и пр. Вот так то же самое, но покороче: btn.onRelease = fadeOut; function fadeOut () { fadeout ? null : fadeout = setInterval (fadeOut , 100); allSound ? null : allSound = new Sound(); //скобки пусты, значит этот экземпляр класса Sound влияет на весь звук ролика count == undefined ? count = 10 : null ; if (count > 0) { count--; allSound.setVolume(count * 10); } else { clearInterval(fadeout); } } Последний раз редактировалось mooncar; 15.02.2010 в 22:40. |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 11
|
Спасибо за ответ. У меня почему-то не получается применить этот код. Вероятно, я что-то не так делаю.
я изначально написал в action-button: on(release){ StopAllSounds(); } И при нажатии на кнопку звук выключался. Такс.. а теперь мне нужно этот код удалить и скопировать туда тот код, который Вы написали? правильно? |
|
|||||
|
Модрон-ветеринар
|
Неправильно. Никаких записей на кнопках и мувиках! Запомните - код пишется только в кадре. Это уже стандарт де-факто, и не просто так.
Называете вашу кнопку на сцене btn, код пишете в AS кадра и все заработает. |
|
|||||
|
Регистрация: Nov 2007
Сообщений: 11
|
Хорошо. Запомнил. Вставил, всё работает! А как теперь вернуть звук по нажатию кнопки?
Добавлено через 34 минуты Просто ситуация такая, нужно чтобы во время нажатия звук тянулся. А когда мышку отпускаешь - чтобы звук затихал. То есть, покакнопка нажата - звук идёт. Когда отпускаешь кнопку - звук затихает. Сейчас звук пока затихает безвозвратно))) |
|
|||||
|
Модрон-ветеринар
|
Не понятно - что значит тянулся "во время нажатия"? Мгновенный старт с начала при нажатии? Вывод плавный из нуля, и при этом с любого места?
|
|
|||||
|
Регистрация: Nov 2007
Сообщений: 11
|
Ну, я не знаю на каком примере лучше показать принцип. Вот например, пианино. Нажимаешь клавишу - звук тянется. Отпускаешь клавишу - звук быстро затихает. Вот такой нужен принцип. Кнопка нажимается - стартует файл, кнопка держится - файл звучит, кнопка отпускается - файл затихает. Потом, если снова нажать на кнопку, стартует тот же файл и всё то же самое. Вот, вроде такой принцип.
|
|
|||||
|
Модрон-ветеринар
|
Помучаю вас еще. У пианино несколько клавиш, это раз. Клавиши могут звучать одновременно, но каждый отдельно от другого, это два. А тут весь звук убирается для всего сразу.
Почитайте о классе Sound. Посмотрите примеры....Спрашивайте, что не получается. Можно сделать многое. Кстати, не "файл должен звучать", а экземпляр класса Sound. Например, если нужно управлять звуками раздельно, то this.createEmptyMovieClip('fa_mc', this.getNextHighestDepth()); this.createEmptyMovieClip('mi_mc', this.getNextHighestDepth()); var fa:Sound = new Sound (fa_mc); var mi:Sound = new Sound (mi_mc); fa.attachSound('fa_id'); //из библиотеки mi.attachSound('mi_id'); //из библиотеки //и где нужно fa.start(); mi.start(); Сделайте на onPress старт звука, а на onRelease - затухание, тогда будет то что вы хотите. Последний раз редактировалось mooncar; 16.02.2010 в 00:48. |
|
|||||
|
Модрон-ветеринар
|
Вот пример, как можно сделать старт звука при нажатии на кнопку и его быстрое затухание при отпускании.
Тут можно сделать много звуков. Все данные, включая сами экземпляры Sound, находятся в двумерном массиве. Сами звуки аттачатся из библиотеки. Сравните, как звучит звук до самого конца, если не отпускать кнопку и как он быстро затухнет, если отпустить. Код: var sounds:Array = new Array(); //двухмерный массив для всего, что связано со звуками //В дальнейшем: //sounds[n]['sound'] - сам экземпляр класса Sound //sounds[n]['count'] - счетчик, соответсвтвенный уровню затухания соотв. звука //sounds[n]['fadeOut'] - интервал, соотвестствующий интервальной функции затухания соотв. звука :) for (i = 1; i < 3; i++) { //работа со звуками sounds[i] = new Array(); //вспомогательный массив , нужен для эмуляции двумерности var mc:MovieClip = this.createEmptyMovieClip('s' + i + '_mc', this.getNextHighestDepth()); //создаем мувик для звука sounds[i]['sound'] = new Sound (mc); //создаем экземпяр звука sounds[i]['sound'].attachSound('s' + i + '_id'); //из библиотеки аттачим соотв. звук //работа с кнопками var btn:MovieClip = this['s' + i + '_btn']; btn.num = i; //сохраняем номер внутри кнопки btn.onPress = startPlay; btn.onRelease = fadeOut; btn.onDragOut = fadeOut; } function startPlay() { var n:Number = this.num; clearInterval(sounds[n]['fadeOut']); sounds[n]['sound'].start(); //стартуется звук, соотв. номеру n sounds[n]['sound'].setVolume(100); //выставляем громкость 100% sounds[n]['count'] = 10; //полный по громкости звук - начальное состояние счетчика } function fadeOut() { n = this.num; sounds[n]['fadeOut'] = setInterval (fadeOutProcess, 50, n); //начинаем процесс затухания, внося номер имнетрвала в массив } function fadeOutProcess (n:Number) { if (sounds[n]['count'] > 0) { sounds[n]['count']--; sounds[n]['sound'].setVolume(sounds[n]['count'] * 10); } else { clearInterval(sounds[n]['fadeOut']); //останавливаем процесс просчета соответственного затухания } } PPS. Конечно же, если хотите, чтобы проигрывались внешние mp3-шки, то вместо аттача из либы нужно сделать загрузку типа Ну и использовать обработчики событий onLoad, чтобы проверить готовность звуков для проигрывания, и тогда разрешать все остальные действия. Последний раз редактировалось mooncar; 16.02.2010 в 02:10. |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|