![]() |
|
||||||||||
|
|||||
|
убрать звук вовремя не получается, т.к. onEnterFrame вызывается при смене кадров, т.е. если смены кадров нет и надо выключать звук - обработчик просто не вызывается ...
Нашел вот такие вещи в хелпе : frame.soundLibraryItem = something (должно прицепить звук к фрейму) frame.soundLoop (должно зациклить звук) У меня не получилось это использовать, если не трудно напишите пример кода |
|
|||||
|
попробуй setInterval
|
|
|||||
|
Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
|
Не понял тогда, что значит "пока мувик проигрывается"? Что таймирует его проигрывание?
|
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
Цитата:
как часто выражаются в англоязычных туториалах "there is a popular misconception"... :) почему-то многие думают, что если не происходит фактического перехода между кадрами в клипе, это останавливает смену кадров вообще в целом. смена кадров постоянна и непрерывна в ролике, что бы ни происходило. при большой нагрузке на флэш плеер, может упасть фпс, но он никогда не станет равным нулю. даже если в ролике нет клипов вообще и всего один кадр в руте - смена кадров происходит. смена кадров = перерисовка экрана, обновление отображения всего на экране. если бы этого не было, было бы невозможно делать программную анимацию (которая с фактическими переходами по кадрам клипов вообще никак не связана). |
|
|||||
|
don't panic!
Регистрация: Aug 2001
Сообщений: 4,121
|
предлагаю решение в стиле 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;
};
};
Цитата:
Extending Flash>Objects>Frame object>... |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|