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

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

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

Регистрация: May 2013
Сообщений: 8
По умолчанию Кнопка пуск/стоп

Имеется простая кнопка, которая запускает и останавливает звук. Проблема в том, что когда звук проигрывается целиком, кнопка все равно сначала работает как "Стоп" и чтоб снова запустить звук на нее нужно нажать два раза.
Собственно, это учебный этюд, поэтому очень ценно мне будет объяснение для тупых, почему слушатель не работает

Код AS3:
var cond:Boolean = false;
var snd:Sound = new hallelujahMp3();
var channel:SoundChannel;
 
addEventListener(MouseEvent.CLICK, playMusic); 
snd.addEventListener(Event.SOUND_COMPLETE, onComplete);
 
function playMusic(Event:MouseEvent){
	if (!cond){
		channel = snd.play(); 
		cond = true;
	}
	else{
		channel.stop();
		cond = false;
	}
}
function onComplete(Event){
	cond = false;
}

Старый 02.06.2013, 20:01
Suntea вне форума Посмотреть профиль Отправить личное сообщение для Suntea Найти все сообщения от Suntea
  № 2  
Ответить с цитированием
Suntea

Регистрация: May 2013
Сообщений: 8
MikroAcse, вообще никак не помогло :С

Старый 03.06.2013, 00:02
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 3  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Код AS3:
var cond:Boolean = false;
var snd:Sound = new hallelujahMp3();
var channel:SoundChannel;
 
addEventListener (MouseEvent.CLICK, playMusic); 
/// строка ниже, это подписка на окончание загрузки звукового файла, а не об окончании проигрывания.
// snd.addEventListener(Event.SOUND_COMPLETE, onComplete);
 
function playMusic (еvent:MouseEvent){
	if (cond) {
		channel.stop ();
		channel.removeEventListener (Event.SOUND_COMPLETE, onSoundComplete);
		channel = null;
	} else {
		channel = snd.play ();
		/// а вот это подписка на конец проигрывания
		channel.addEventListener (Event.SOUND_COMPLETE, onSoundComplete);
 
	}
	/// любой вызов инвертирует состояние cond, поэтому можно не указывать это явно: cond = true или cond = false
	cond = !cond;
}
function onSoundComplete (event:Event) {
	cond = false;
	channel.removeEventListener (Event.SOUND_COMPLETE, onSoundComplete);
	channel = null;
}
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 03.06.2013 в 00:44.
Старый 03.06.2013, 00:13
Suntea вне форума Посмотреть профиль Отправить личное сообщение для Suntea Найти все сообщения от Suntea
  № 4  
Ответить с цитированием
Suntea

Регистрация: May 2013
Сообщений: 8
Компилятор выдает ошибку:
1119: Access of possibly undefined property SOUND_COMPLETE through a reference with static type flash.events:MouseEvent.

и мне интересно, почему в playMusic такой странный порядок условий? то есть, он принципиален, или ничего не изменится, если я напишу наоборот?

Старый 03.06.2013, 00:39
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Ошибка, потому что нет импорта нужных классов.
Исправил ошибку копипаста. Вместо function playMusic (Event:MouseEvent), должно быть function playMusic (еvent:MouseEvent).

Почему странный? Из-за того, что сначала стоп, а потом плей описаны? Роли не играет, я ориентируюсь на condition, а не на содержимое. Не люблю писать if (!condition), если есть else. if (condition) проще для понимания.
Ну и плюс привычка с AVM1, там ! требовал лишнею операцию на инвертирование в условии, а в AVM2 есть отдельная инструкция.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 03.06.2013, 02:49
Suntea вне форума Посмотреть профиль Отправить личное сообщение для Suntea Найти все сообщения от Suntea
  № 6  
Ответить с цитированием
Suntea

Регистрация: May 2013
Сообщений: 8
Спасибо! Работает.
Хм, понятно. Интересно. Хотя я просто не думаю как программист, вот и кажется странным

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

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

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


 


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


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