Показать сообщение отдельно
Старый 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.