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

Blackjack1616 21.12.2010 14:26

проблема: музыка начинает играть в каждом кадре
 
привет!

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

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

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

Добавлено через 58 минут
я только что, придумал хитрость, к анимации добавил слой, где первый кадр - пустой, и звук не воспроизводиться сразу(мувик на сцене, с _visible = 0 и .stop()), и теперь нажав на кнопку все вроде бы хорошо(убрал функцию воспроизводящий и импортирующий звук, и музыка не множиться). но интересно на будущие узнать как более правильно решать такие задачи, кодом?
как?

dark256 21.12.2010 16:11

Кодом - да. Читайте класс Sound. - attachSound()< Start и Stop.
Дождаться пока звук доиграет и не запускать в это время новый - onSoundComplete
Класс простенький. Только имейте ввиду что громкость всех звуков, лежащих в ОДНОМ клипе, к примеру на _root - будет одинаковая.

Blackjack1616 21.12.2010 19:41

тоесть если в энтерфрейме я вызову что то подобное, звук не будет множиться?

mySound.onSoundComplete = function() {
this.start();
};

dark256 21.12.2010 19:47

нет. это СОБЫТИЕ. Оно НАСТУПАЕТ само по себе, когда музыка проигралась.
Соотв. функцию переключения или запуска не надо запускать самому.
Никаких доп. телодвижений делать не надо.

Blackjack1616 21.12.2010 20:09

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

с классом sound - проблемм не возникает, управление им хорошо гуглица и находиться многое на этом форуме.

Код AS1/AS2:

button.onPress = function(){
                button.gotoAndStop(3);
                this.onEnterFrame = function(){
                        bgbg._alpha -= 3;
                        if(bgbg._alpha<=0){
                                bgbg._alpha=0;
                                removeMovieClip(bgbg);
                        }
                        button._alpha-=3;
                        if(button._alpha<=0){
                                bgbg._alpha=0;
                                //removeMovieClip(bgbg);
                                button._x=-100;
 
                        }
                        if(button._alpha<=30){
                                movie._visible = true;
                                movie.play();
                                myMus.start(0,0);\\и вот тут вот чудеса происходить начинают
 
                        }
                        if(movie._currentframe >= 722){
                                movie.gotoAndStop(722);
                        }
                }
        }

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

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

dark256 22.12.2010 13:06

Вам надо определить - проигрывается ли в наастоящий момент данный звук.
1. Заведите переменную, которая выставляется в TRUE при первом запуске звука и в FALSE по onSoundComplete и при инициализации. Соотв
Код AS1/AS2:

if ( !звук_звучит ) myMus.start(0,0);

2. Почитайет про .position
Код AS1/AS2:

if ( myMus.position == 0 ) start(0,0);

НИкаких велосипедов и хитростей. Просто методжы класа и здравый смысл. А так, пока альфа у вас менье 30, а она меньше, звук у ас запускается каждый раз.

Blackjack1616 25.12.2010 20:39

ухты! спасибо, большое, буду разбираться.


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

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