Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.02.2010, 22:05
MSergey вне форума Посмотреть профиль Отправить личное сообщение для MSergey Найти все сообщения от MSergey
  № 1  
Ответить с цитированием
MSergey

Регистрация: Nov 2007
Сообщений: 11
По умолчанию Подскажите пожалуйста по FadeOut AS2.0

На кнопке стоит функция - StopAllSounds(); Она останавливает любой звук в ролике, жестко обрывая его. Можно ли сделать так, чтобы при нажатии на кнопку звук не обрывался, а затухал плавно?

Старый 15.02.2010, 22:23
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Код AS1/AS2:
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);
	}
}
Тут в 10 шагов (каждый шаг - раз в 100 мс) уводится в 0 громкость всех звуков в ролике.
Если нужно опять стартовать какой-то звук, то нужно будет поднять всю громкость до 100 объекта allSound и только тогда стартовать нужный звук.
Если так поступать нежелательно, то нужна несколько другая схема работы со звуком, зависящая от конкретных обстоятельств - откуда и как стартуются звуки, сколько их и пр.

Вот так то же самое, но покороче:
Код AS1/AS2:
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.
Старый 15.02.2010, 22:40
MSergey вне форума Посмотреть профиль Отправить личное сообщение для MSergey Найти все сообщения от MSergey
  № 3  
Ответить с цитированием
MSergey

Регистрация: Nov 2007
Сообщений: 11
Спасибо за ответ. У меня почему-то не получается применить этот код. Вероятно, я что-то не так делаю.

я изначально написал в action-button:

on(release){
StopAllSounds();
}

И при нажатии на кнопку звук выключался. Такс.. а теперь мне нужно этот код удалить и скопировать туда тот код, который Вы написали? правильно?

Старый 15.02.2010, 22:43
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 4  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Неправильно. Никаких записей на кнопках и мувиках! Запомните - код пишется только в кадре. Это уже стандарт де-факто, и не просто так.

Называете вашу кнопку на сцене btn, код пишете в AS кадра и все заработает.

Старый 15.02.2010, 22:54
MSergey вне форума Посмотреть профиль Отправить личное сообщение для MSergey Найти все сообщения от MSergey
  № 5  
Ответить с цитированием
MSergey

Регистрация: Nov 2007
Сообщений: 11
Хорошо. Запомнил. Вставил, всё работает! А как теперь вернуть звук по нажатию кнопки?

Добавлено через 34 минуты
Просто ситуация такая, нужно чтобы во время нажатия звук тянулся. А когда мышку отпускаешь - чтобы звук затихал. То есть, покакнопка нажата - звук идёт. Когда отпускаешь кнопку - звук затихает.

Сейчас звук пока затихает безвозвратно)))

Старый 15.02.2010, 23:43
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 6  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Не понятно - что значит тянулся "во время нажатия"? Мгновенный старт с начала при нажатии? Вывод плавный из нуля, и при этом с любого места?

Старый 16.02.2010, 00:22
MSergey вне форума Посмотреть профиль Отправить личное сообщение для MSergey Найти все сообщения от MSergey
  № 7  
Ответить с цитированием
MSergey

Регистрация: Nov 2007
Сообщений: 11
Ну, я не знаю на каком примере лучше показать принцип. Вот например, пианино. Нажимаешь клавишу - звук тянется. Отпускаешь клавишу - звук быстро затихает. Вот такой нужен принцип. Кнопка нажимается - стартует файл, кнопка держится - файл звучит, кнопка отпускается - файл затихает. Потом, если снова нажать на кнопку, стартует тот же файл и всё то же самое. Вот, вроде такой принцип.

Старый 16.02.2010, 00:36
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 8  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Помучаю вас еще. У пианино несколько клавиш, это раз. Клавиши могут звучать одновременно, но каждый отдельно от другого, это два. А тут весь звук убирается для всего сразу.
Почитайте о классе Sound. Посмотрите примеры....Спрашивайте, что не получается.
Можно сделать многое.

Кстати, не "файл должен звучать", а экземпляр класса Sound.
Например, если нужно управлять звуками раздельно, то
Код AS1/AS2:
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();
Добавлено через 6 минут
Сделайте на onPress старт звука, а на onRelease - затухание, тогда будет то что вы хотите.


Последний раз редактировалось mooncar; 16.02.2010 в 00:48.
Старый 16.02.2010, 01:49
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 9  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вот пример, как можно сделать старт звука при нажатии на кнопку и его быстрое затухание при отпускании.
Тут можно сделать много звуков. Все данные, включая сами экземпляры Sound, находятся в двумерном массиве.
Сами звуки аттачатся из библиотеки.
Сравните, как звучит звук до самого конца, если не отпускать кнопку и как он быстро затухнет, если отпустить.

Код:
Код AS1/AS2:
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']); //останавливаем процесс просчета соответственного затухания
	}
}
PS. Там в исходнике для 2 звуков в цикле нужно тоже 3 проставить, если что.
PPS. Конечно же, если хотите, чтобы проигрывались внешние mp3-шки, то вместо аттача из либы нужно сделать загрузку типа
Код AS1/AS2:
sounds[i]['sound'].loadSound('s' + i + '.mp3');
Ну и использовать обработчики событий onLoad, чтобы проверить готовность звуков для проигрывания, и тогда разрешать все остальные действия.


Последний раз редактировалось mooncar; 16.02.2010 в 02:10.
Создать новую тему Ответ Часовой пояс GMT +4, время: 17:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 17:31.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.