Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Не прекращающийся звук (http://www.flasher.ru/forum/showthread.php?t=136595)

greatilya 20.02.2010 18:59

Не прекращающийся звук
 
Сразу извинюсь если вопрос очень элементарный, но с флешем я на ВЫ...
Подскажите как сделать так, чтобы звук, проигравшись один раз не прекращался, а повторялся. Так скажем зациклить воспроизведение.
Есть следующий код:
Код AS1/AS2:

var snd:Sound = new Sound();
snd.load(new URLRequest("sound.mp3"));
var channel:SoundChannel = new SoundChannel();
snd.addEventListener(Event.COMPLETE, onLoadComplete, false, 0, true);
function onLoadComplete(evt:Event):void {
        var localSnd:Sound = evt.target as Sound;
        channel = localSnd.play();
}
 
soundBtnON.buttonMode = true;
soundBtnON.useHandCursor = true;
soundBtnOFF.buttonMode = true;
soundBtnOFF.useHandCursor = true;
soundBtnON.visible = false;
soundBtnOFF.addEventListener(MouseEvent.MOUSE_UP, soundBtnOFF_onClick);
function soundBtnOFF_onClick(evt:MouseEvent):void {
        soundBtnON.visible = true;
        channel.stop();
}
soundBtnON.addEventListener(MouseEvent.MOUSE_UP, soundBtnON_onClick);
function soundBtnON_onClick(evt:MouseEvent):void {
        soundBtnON.visible = false;
        channel = snd.play();
}

Методов типа loop() как я понял нет...
Заранее благодарен!

mooncar 20.02.2010 19:06

Не привязываясь к вашему коду, приведу пример:
Код AS1/AS2:

my_sound.onSoundComplete = function() {
 my_sound.play();
};

Довольно просто.

greatilya 20.02.2010 19:22

mooncar,
спасибо ОГРОМНОЕ!

Принцип понял. Пытаюсь заместо my_sound подставлять snd, channel, localSnd .... Пока безуспешно. Пытаюсь понять глубже к чему именно надо дописать onSoundComplete и где :)

mooncar 20.02.2010 19:36

К тому экземпляру Sound, который нужно зациклить.
Не напутайте там с областями видимости - у вас, например, localSnd, виден только внутри функции.

greatilya 21.02.2010 09:32

Что-то никак не могу сообразить.
Вызвать onSoundComplete мне не дает, возникает следующая ошибка:
- Warning: 1090: Ошибка миграции: Flash Player не запускает обработчик событий onSoundComplete автоматически во время выполнения в ActionScript 3.0. Сначала нужно зарегистрировать этот обработчик для события, используя addEventListener ("soundComplete", callback_handler).

переписал код следующим образом:
Код AS3:

var snd:Sound = new Sound();
snd.load(new URLRequest("sound.mp3"));
var channel:SoundChannel = new SoundChannel();
snd.addEventListener(Event.COMPLETE, onLoadComplete, false, 0, true);
snd.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
 
function onLoadComplete(evt:Event):void {
        //var localSnd:Sound = evt.target as Sound;
        channel = snd.play();
}
function onSoundComplete(evt:Event):void
{
//channel.stop();
channel = snd.play();
}

Итого добавил:
Код AS3:

snd.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
function onSoundComplete(evt:Event):void
{
//channel.stop();
channel = snd.play();
}

Ошибок не стало но как я понимаю вызова onSoundComplete не происходит.

mooncar 21.02.2010 09:59

Еще бы! Простите, а вы его как записали? Вы на мой пример посмотрите внимательно, как записано. Ничего в глаза не бросается?Тут раздел AS1/AS2, вы невнимательность проявили, а я сразу внимания не обратил.
И с точки зрения AS2 у вас сейчас функция пытается отработать события this, а не события звука. А this - это не звук.
Как сделать и возможно ли это в AS3 в хелпе посмотрите или в соответств. ветке вопрос задайте.

greatilya 21.02.2010 10:12

Извиняюсь еще раз... я не знаю отличий в ActionScript и понятия не имею на какой версии пишу. Поэтому вероятно и написал не в тот раздел.
суть в том, что если я пишу опираясь на вашу подсказку что-то вроде этого:
Код AS1/AS2:

snd.onSoundComplete = function() {
 snd.play();
};

то мне выдается как я уже писал:
Цитата:

Warning: 1090: Ошибка миграции: Flash Player не запускает обработчик событий onSoundComplete автоматически во время выполнения в ActionScript 3.0. Сначала нужно зарегистрировать этот обработчик для события, используя addEventListener ("soundComplete", callback_handler)
Как видно из сообщения ошибки теперь могу догадаться что у меня написан скрипт на AS3... И мне задать вопрос в другой раздел?
PS: mooncar, выражаю признательность за то что оперативно отвечаете причем вежливо)

mooncar 21.02.2010 10:23

Бывает. Изучите внимательно то, что вы делаете - главный вам совет, чтобы не попать впросак.
А прежде чем задавать вопрос на форуме, откройте встроенный хелп, да посмотрите, как отловить момент окончания звучания. И по этому событию стартуйте его снова.
Я AS3 не знаю, но вероятно, там также есть такое событие, посмотрите верный синтаксис.

greatilya 21.02.2010 11:05

Цитата:

Изучите внимательно то, что вы делаете
Просто у меня очень много задач, и flash далеко не мое призвание и специальность. И задачи в нем я выполняю простые.
Цитата:

откройте встроенный хелп, да посмотрите, как отловить момент окончания звучания
вот я и писал на основании хелпа встроеного....

Еще раз спасибо!


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

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