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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.10.2009, 18:50
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 1  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
По умолчанию Замудренный запуск звука по нажатию на клипы

Здравствуйте, давно сюда не заходил - все дела... В универе попросили сделать презентации по темам, да еще и не просто, а со звуком. Сел вечером создавать функцию проигрывания звука. Нажимался клип - звук проигрывался, нажимался снова - звук останавливался. Затем я попробовал сделать два клипа и два звука. Все заработало. Но вот не так, как мне надо. При нажатии на первый клип срабатывал первый звук. При нажатии на второй клип первый звук затыкался, второй не стартовал.
Можно ли как-то сделать, чтобы при нажатии на второй клип проигрывался второй звук, а первый переставал играть? Заранее спасибо

Вот код:
Код AS1/AS2:
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");
}
__________________
тут я

Старый 21.10.2009, 19:21
lexa2000lexa вне форума Посмотреть профиль Отправить личное сообщение для lexa2000lexa Найти все сообщения от lexa2000lexa
  № 2  
Ответить с цитированием
lexa2000lexa

Регистрация: Sep 2005
Сообщений: 950
создавайте два обьекта Sound , и с каждым работайте.

Старый 21.10.2009, 20:10
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Спасибо за идею, но ежели этих звуков больше, чем два? Скажем, десятка два-три. Конечно, я сейчас попробую что-то сварганить с двумя объектами, но хотелось бы услышать еще варианты решения)

Добавлено через 3 часа 44 минуты
немного переделал функцию. Теперь останавливается одна и играет вторая. Вот только вообще остановить проигрывание нельзя - обязательно играет какая-то из мелодий:
Код AS1/AS2:
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.
Старый 22.10.2009, 00:25
amexdesign вне форума Посмотреть профиль Отправить личное сообщение для amexdesign Посетить домашнюю страницу amexdesign Найти все сообщения от amexdesign
  № 4  
Ответить с цитированием
amexdesign

Регистрация: Jan 2009
Адрес: Германия, Bochum
Сообщений: 169
Отправить сообщение для amexdesign с помощью Skype™
примерно вот так:
Код AS1/AS2:
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);
	}
}

Старый 22.10.2009, 00:40
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
amexdesign, интересная реализация. Только вот в ней, если нажать несколько раз на одну и ту же кнопку, звук, запускаемый с этой кнопкой, дублируется и накладывается сам на себя...

Можно составить вот такую конструкцию:
Код AS1/AS2:
if (vsound.start(mp3[btnID])) {  //если этот звук играет
	vsound.stop(mp3[btnID]); 
}
? Знаю, что в скобках неправильное выражение, но можно ли его как-то примерно написать?
__________________
тут я


Последний раз редактировалось КорДум; 22.10.2009 в 00:50.
Старый 22.10.2009, 00:58
amexdesign вне форума Посмотреть профиль Отправить личное сообщение для amexdesign Посетить домашнюю страницу amexdesign Найти все сообщения от amexdesign
  № 6  
Ответить с цитированием
amexdesign

Регистрация: Jan 2009
Адрес: Германия, Bochum
Сообщений: 169
Отправить сообщение для amexdesign с помощью Skype™
тогда избигаем это следующим образом:
Код AS1/AS2:
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);
          } 
	}
}

Старый 22.10.2009, 01:02
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 7  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
и опять промах) Теперь звук не останавливается вообще - это раз. И если проиграть первый звук, затем второй, а после этого снова первый - первый звук можно снова дублировать - это два) Сейчас попробую флагами одолеть это...
Обязательно отпишу, даже если не получилось

Добавлено через 5 минут
отлично, заработало! Теперь ваша функция приобрела следующий вид:

Код AS1/AS2:
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 минуту
хе, добавил на сцену еще парочку кнопкоклипов и в библиотеку парочку звуков, решил проверить свою догадку. Оказалось, точно - если запустить первый звук, а затем четвертый - они накладываются друг на друга. Вот здесь недочет:
Код AS1/AS2:
vsound.stop(mp3[btnID - 1]);
vsound.stop(mp3[btnID + 1]);
btn[btnID - 1].enbl = false;
btn[btnID + 1].enbl = false;
исправил вот так:
Код AS1/AS2:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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