![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Имеется простая кнопка, которая запускает и останавливает звук. Проблема в том, что когда звук проигрывается целиком, кнопка все равно сначала работает как "Стоп" и чтоб снова запустить звук на нее нужно нажать два раза.
Собственно, это учебный этюд, поэтому очень ценно мне будет объяснение для тупых, почему слушатель не работает 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; } |
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
MikroAcse, вообще никак не помогло :С
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
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; } Последний раз редактировалось iNils; 03.06.2013 в 00:44. |
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Компилятор выдает ошибку:
1119: Access of possibly undefined property SOUND_COMPLETE through a reference with static type flash.events:MouseEvent. и мне интересно, почему в playMusic такой странный порядок условий? то есть, он принципиален, или ничего не изменится, если я напишу наоборот? |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Исправил ошибку копипаста. Вместо function playMusic (Event:MouseEvent), должно быть function playMusic (еvent:MouseEvent). Почему странный? Из-за того, что сначала стоп, а потом плей описаны? Роли не играет, я ориентируюсь на condition, а не на содержимое. Не люблю писать if (!condition), если есть else. if (condition) проще для понимания. Ну и плюс привычка с AVM1, там ! требовал лишнею операцию на инвертирование в условии, а в AVM2 есть отдельная инструкция. |
|
|||||
|
Регистрация: May 2013
Сообщений: 8
|
Спасибо! Работает.
Хм, понятно. Интересно. Хотя я просто не думаю как программист, вот и кажется странным ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:23. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|