Форум 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)
-   -   по плавному вкл/выкл звука (код с flashist.ru) (http://www.flasher.ru/forum/showthread.php?t=127338)

invictus 11.07.2009 14:55

по плавному вкл/выкл звука (код с flashist.ru)
 
Хочу попросить помощи с кодом, который я взял с сайта flashist.ru - это плавное включение/выключение звука в ролике (пробовал писать автору, но ответа нет). Этот код работает замечательно, но в моем случае он немного не подходит ввиду того, что он выключает/включает звук во всем мувиклипе; собственно в чем вопрос - можно ли его адаптировать(если возможно то как?), чтобы он выключал/включал плавно только определенный звук/музыку?

Вот сам код:

Код AS1/AS2:

btn_mc.gotoAndPlay(2);
var s_sound:Sound = new Sound(this);
s_sound.attachSound("Music");
s_sound.start(0, 99999);
s_sound.onSoundComplete = function() {
        this.start(0, 99999);
};
btn_mc.onRelease = function() {
        clearInterval(_root.sound_int);
        if (_root.s_sound.getVolume()<100) {
                _root.sound_int = setInterval(_root.soundOn_func, 50, 10);
                this.gotoAndPlay(7);
        } else {
                _root.sound_int = setInterval(_root.soundOff_func, 50, 10);
                this.gotoAndPlay(2);
        }
};
 
function soundOff_func(varDelta:Number) {
        _root.s_sound.setVolume(_root.s_sound.getVolume()-5);
        if (_root.s_sound.getVolume()<=varDelta) {
                clearInterval(_root.sound_int);
                _root.s_sound.setVolume(0);
        }
}
function soundOn_func(varDelta:Number) {
        _root.s_sound.setVolume(_root.s_sound.getVolume()+varDelta);
        if (_root.s_sound.getVolume()>=100) {
                clearInterval(_root.sound_int);
                _root.s_sound.setVolume(100);
        }
}


KiL33 12.07.2009 06:19

Для каждого объекта объявляете свой звук.
Т.е. s_sound...s_sound2...s_sound3...

invictus 13.07.2009 11:17

не помогает это... дело в том, что код, как я понимаю завязан на _root'e, и скорее всего в этом проблема, но я спрашиваю, потому что не знаю как сделать так, чтобы он не влиял на все звуки в мувиклипе :)

lii 13.07.2009 12:45

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

invictus 14.07.2009 14:46

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

zveryuka 14.07.2009 15:49

вот... нормально все описано)

http://www.flasher.ru/forum/showthre...t=%E7%E2%F3%EA

invictus 17.07.2009 10:42

как смог, поробовал, без результатов :( я полагаю, что причина в том, что в коде регулирование звука завязано с _root'ом - это можно как-либо изменить, чтобы отношение было только к одному звуку? на что его заменить? я пробовал на this, имя символа со звуком (это конечно оказалось неправльно)...

Добавлено через 8 часов 7 минут
пробовал также назначать через lib_sound.... также не помогло

Добавлено через 19 часов 4 минуты
попробовал учесть все идеи, которые здесь дали, получилась такая конструкция :)
в начале мувиклипа:
Код AS1/AS2:

this.createEmptyMovieClip("kkt_mc", this.getNextHighestDepth()); 
this.createEmptyMovieClip("bg_s", this.getNextHighestDepth());
var kkt:Sound = new Sound(_root.kkt_mc);
kkt.attachSound("kkt");
var muzika:Sound = new Sound(_root.bg_s);
muzika.attachSound("muzika");

где собственно первый - kkt_mc - это назначение для звука, а bg_s - фоновая музыка;
==далее==
в нужном месте, для звука стоит kkt.start(0, 1), а для кнопки с музыкой такое:
Код AS1/AS2:

btn_mc.gotoAndPlay(2);
muzika.start(0, 99999);
muzika.onSoundComplete = function() {
        this.start(0, 99999);
};
btn_mc.onRelease = function() {
        clearInterval(_root.bg_s.sound_int);
        if (_root.bg_s.muzika.getVolume()<100) {
                _root.bg_s.sound_int = setInterval(_root.bg_s.soundOn_func, 50, 10);
                this.gotoAndPlay(7);
        } else {
                _root.bg_s.sound_int = setInterval(_root.bg_s.soundOff_func, 50, 10);
                this.gotoAndPlay(2);
        }
};
function soundOff_func(varDelta:Number) {
        _root.bg_s.muzika.setVolume(_root.bg_s.muzika.getVolume()-5);
        if (_root.bg_s.muzika.getVolume()<=varDelta) {
                clearInterval(_root.bg_s.sound_int);
                _root.bg_s.muzika.setVolume(0);
        }
}
function soundOn_func(varDelta:Number) {
        _root.bg_s.muzika.setVolume(_root.bg_s.muzika.getVolume()+varDelta);
        if (_root.bg_s.muzika.getVolume()>=100) {
                clearInterval(_root.bg_s.sound_int);
                _root.bg_s.muzika.setVolume(100);
        }
}

в итоге что получается - если включать ролик - все проходит в штатном режиме :victory: - музыка играет, звуки есть в нужных местах - все супер, до того, как я хочу плавно выключить эту музыку :rolleyes: вообщем происходит следующее - кнопка отвечающая за плавное вкл/выкл музыкы переходит в нужное состояние для положение "выкл" так как изначально, когда ролик начинает воспроизводится, она в состоянии вкл(это то как и надо, тут все ок), но не смотря на кнопку музыка не останавливается, а при попытке еще раз нажать на кнопку с музыкой - ничего не происходит, можно сказать, кнопка зависает и не меняет положения....
также по предложению свыше пробовал там где начало кода и аттач звуков с музыкой накинуть
Код AS1/AS2:

_root.bg_s.muzika=muzika;

- но сим не дало эффекта...
короч, у меня окончательный тупняк - все рабочее, но не так как надо, флэш на код не ругается ни там ни сям...:wacko:

iNils 18.07.2009 12:51

Код AS1/AS2:

this.createEmptyMovieClip ("frontSound", this.getNextHighestDepth ());
var snd:Sound = new Sound (this.frontSound);
snd.attachSound ("snd");
///
this.createEmptyMovieClip ("bgSound", this.getNextHighestDepth ());
var music:Sound = new Sound (this.bgSound);
music.attachSound ("music");
///
btn_mc.gotoAndPlay (2);
music.start (0, 99999);
music.onSoundComplete = function () {
        this.start (0, 99999);
};
///
var flagMute:Boolean = false;
var interval:Number
///
btn_mc.onRelease = function () {
        clearInterval (interval);
        if (flagMute) {
                interval = setInterval (soundOff, 50, 10);
                this.gotoAndPlay (2);
        } else {
                interval = setInterval (soundOn, 50, 10);
                this.gotoAndPlay (7);
        }
        flagMute = !flagMute;
};
function soundOff (varDelta:Number) {
        music.setVolume (music.getVolume () - 5);
        if (music.getVolume () <= varDelta) {
                clearInterval (interval);
                music.setVolume (0);
        }
}
function soundOn (varDelta:Number) {
        music.setVolume (music.getVolume () + varDelta);
        if (music.getVolume () >= 100) {
                clearInterval (interval);
                music.setVolume (100);
        }
}


invictus 02.08.2009 18:31

я очень благодарен комраду iNils за решения проблемы :))) но вот чудесным образом этот код как-то повлиял на прелоадер ролика, раньше он работал с самого начала - т.е. с 1%, а теперь я долго любуюсь пустым экраном в течении n-ого времени, а потом вдруг появляется прелоадер сразу на процентах ~75-80% - в чем может быть загвостка? да и как мог код на кнопку повлиять на прелоадер.... X)

Добавлено через 19 часов 1 минуту
-----
ага, выяснил, повлияло то, что на файле музыки был проставлен линкедж с экспортом в первый кадр... как теперь быть?

iNils 19.08.2009 17:22

Цитата:

ага, выяснил, повлияло то, что на файле музыки был проставлен линкедж с экспортом в первый кадр...
1. Убирает галку.
2. Создаете пустой клип, переносите его во второй кадр основного таймлайна.
3. В первом кадре клипа пишите stop ();
4. Во втором кадре клипа в таймлайн вставляете ваш звук.

Таким образом мы импортируем звук в swf, но не в первый кадр, что дает прелоадеру из первого кадра нормально работать.


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

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