Форум 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=73031)

Марк 10.12.2005 22:34

звук
 
Итак, надо сделать, чтобы пока мувик проигрывается, играет звук, соответственно если мувик не проигрывается, звука быть не должно.
Мне нужно это сделать кодом, а не засунуть звук в 1й кадр мувика с пометкой loop.


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

Инициализация и обращение к звуку :
burning = new Sound();
burning.attachSound("burning");
burning.start(0, 10);
burning.stop();

Марк 11.12.2005 14:49

ап
^
||

MIX-er 11.12.2005 15:27

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

Марк 11.12.2005 15:32

или стоп, или просто уничтожить (removeMovieClip)

MIX-er 11.12.2005 17:25

ну может я примитивно скажу но...

мне в голову пришлё следующее

запускаем он ентер фрейм... им проверяем тикущий кадр в нужном мувике если пред идущий не равем текущему значит играется если равен или неопределён не играется... вот тогда мы убиваем он ентер фрейм и вырубаем звук

вот так вот я се вижу решение...
может можно прощще ждёмс гуру)

Марк 11.12.2005 18:17

Цитата:

Сообщение от MIX-er
запускаем он ентер фрейм... им проверяем тикущий кадр в нужном мувике если пред идущий не равем текущему значит играется

Убить звук по твоей идее можно, а вот запустить - получается при любой смене кадров звук будет начинаться заного. Нужна какая-нибудь проверка, играет ли этот звук в данный момент или нет

MIX-er 11.12.2005 20:42

ну создай функцию запуска звука...
вней проверяй запускался он или нет... если не запускался запускай если запускался не запускай... всё...

Марк 11.12.2005 22:45

ну так в том вся и фишка что я не знаю как проверить запуск :)

burning.start(0, 10); - так запускать на 10 повторов
burning.stop(); - так останавливать

а проверить как ?

MOHCTEP 12.12.2005 00:10

Флажок пришпандорь. Или по тому-же энтерфрейму проверяй значение Sound.position.

MIX-er 12.12.2005 11:27

я по ходу вопрос неверно понял)

Марк 13.12.2005 09:16

убрать звук вовремя не получается, т.к. onEnterFrame вызывается при смене кадров, т.е. если смены кадров нет и надо выключать звук - обработчик просто не вызывается ...

Нашел вот такие вещи в хелпе :
frame.soundLibraryItem = something (должно прицепить звук к фрейму)
frame.soundLoop (должно зациклить звук)

У меня не получилось это использовать, если не трудно напишите пример кода

__i 13.12.2005 13:35

попробуй setInterval

MOHCTEP 13.12.2005 13:39

Не понял тогда, что значит "пока мувик проигрывается"? Что таймирует его проигрывание?

Nox Noctis 13.12.2005 14:00

Цитата:

Сообщение от Марк
т.к. onEnterFrame вызывается при смене кадров, т.е. если смены кадров нет и надо выключать звук - обработчик просто не вызывается ...

Вызывается.

как часто выражаются в англоязычных туториалах "there is a popular misconception"... :) почему-то многие думают, что если не происходит фактического перехода между кадрами в клипе, это останавливает смену кадров вообще в целом.

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

даже если в ролике нет клипов вообще и всего один кадр в руте - смена кадров происходит. смена кадров = перерисовка экрана, обновление отображения всего на экране. если бы этого не было, было бы невозможно делать программную анимацию (которая с фактическими переходами по кадрам клипов вообще никак не связана).

Nox Noctis 13.12.2005 14:31

предлагаю решение в стиле AS1.
на мой взгляд, оно здесь наиболее адекватно.

если сильно захочется - перепиши всё это как класс AS2, расширяющий MovieClip. тогда сохранять ссылки на исходные методы не придется, можно будет вызывать их через super.

Код:

//
// предположим, clip - это клип, от проигрывания которого зависит звук
// если речь о главной линейке, то clip = _root
//
// обязательно ассоциируем звук с клипом
// и почему бы на записать ссылку на звук в сам клип...
clip.burning = new Sound(clip);
clip.burning.attachSound("burning");
//
// эта переменная хранит позицию звука
// (до какого места доигрался, в секундах)
clip.burning.current_time = 0;
//
// изначально клип стоит
clip.stop();
//
// сохраняем в клипе ссылки на исходные методы, управляющие проигрыванием
clip._play = clip.play;
clip._stop = clip.stop;
clip._gotoAndStop = clip.gotoAndStop;
// переопределяем методы, управляющие проигрыванием клипа
clip.play = function()
{
        // одновременно с запуском проигрывания запускаем и звук
        // с того же места, где он остановился
        this.burning.start(this.burning.current_time, 0);
        // выполняем исходный play
        this._play();
};
clip.stop = function()
{
        // запоминаем до какого места доигрался звук
        this.burning.current_time = this.burning.position/1000;
        // останавливаем звук одновременно с остановкой проигрывания
        this.burning.stop();
        // выполняем исходный stop
        this._stop();
};
clip.gotoAndStop = function()
{
        // выполняем исходный gotoAndStop
        this._gotoAndStop.apply(this, arguments);
        // дополнительно вызываем наш stop, чтобы остановился звук
        this.stop();
};
clip.gotoAndPlay = function()
{
        // выполняем исходный gotoAndStop
        this._gotoAndStop.apply(this, arguments);
        // вызываем наш play, чтобы запустился и клип и звук
        this.play();
};
//
// а это для того чтобы проверить как это всё работает.
// надо создать какой-нибудь клип, назвать его clip и сделать в нём какую-то анимацию
this.onMouseDown = function()
{
        // при первом клике запускаем проигрывание
        this.clip.play();
        var launch_function = arguments.callee;
        this.onMouseDown = function()
        {
                // при втором клике останавливаем проигрывание
                this.clip.stop();
                this.onMouseDown = launch_function;
        };
};

Цитата:

Сообщение от Марк
Нашел вот такие вещи в хелпе :
frame.soundLibraryItem = something (должно прицепить звук к фрейму)
frame.soundLoop (должно зациклить звук)

внимательнее... :) это ты открыл хэлп по JSFL, а не по ActionScript. обрати внимание, где находятся эти статьи хэлпа:
Extending Flash>Objects>Frame object>...


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

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