Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   AS3- как погасить музыку при уходе с swf ? (http://www.flasher.ru/forum/showthread.php?t=138405)

AlexMakienko 07.04.2010 02:37

AS3- как погасить музыку при уходе с swf ?
 
Братцы я в AS3 не очень то.
На swf файле, формирующем основное окно сайта, играет хор. музыка, которую не хочется отключать. При переключении на другую html стр. ( которая стоит в одной папке с этим swf файлом) музыка продолжает играть как фон.

Желательно ее погасить или откл. совсем.
Собственно часть скрипта для музыки на этом swf файле:

Код:


// Toggle background music

var musicState:Boolean = true;
var musicPref:Boolean = true;
function toggleMusic(val) {
        if (val == true) {
                footer_mc.musicControls_mc.gotoAndStop(2);
                my_sound.stop();
                musicState = false;
                musicPref = false
        } else {
                footer_mc.musicControls_mc.gotoAndStop(1);
                my_sound.onLoad = function(success:Boolean) {
                        if (success) {
                                my_sound.start(0,999);
                                my_sound.setVolume(100);
                                status_txt.text = "Sound loaded";
                        } else {
                                status_txt.text = "Sound failed";
                        }
                };
                my_sound.loadSound(myMusic, false);
                musicState = true;
                musicPref = true;
        }
}

function fadeOutMusic() {
        musicState = false;
        footer_mc.musicControls_mc.gotoAndStop(2);
        currentVol = my_sound.getVolume();
        footer_mc.musicControls_mc.onEnterFrame = function() {
                if (currentVol>0){
                        currentVol-=2;
                        my_sound.setVolume(currentVol);
                } else {
                        my_sound.setVolume(0);
                        delete footer_mc.musicControls_mc.onEnterFrame;
                }
        }
}
function fadeInMusic(){
        if (musicPref == true) {
                musicState = true;
                footer_mc.musicControls_mc.gotoAndStop(1);
                currentVol = my_sound.getVolume();
                footer_mc.musicControls_mc.onEnterFrame = function() {
                        if (currentVol<100) {
                                currentVol+=2;
                                my_sound.setVolume(currentVol);
                        } else {
                                my_sound.setVolume(100);
                                delete footer_mc.musicControls_mc.onEnterFrame;
                        }
                }
        }
}


footer_mc.musicControls_mc.onRelease = function() {
        if (musicState == true) {
                toggleMusic(true);
        } else {
                toggleMusic(false);
        }
};
footer_mc.musicControls_mc.onRollOver = function() {
        this._alpha = 80;
};
footer_mc.musicControls_mc.onRollOut = footer_mc.musicControls_mc.onReleaseOutside = function() {
        this._alpha = 100;
};

Выхода по URL нет. Уход на новую html стр. через команду в menu.XML
Подскажите, пожалуйста, что тут можно сделать ?

Alex Lexcuk 07.04.2010 03:17

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

AlexMakienko 07.04.2010 04:05

Alex Lexcuk Даже если на новой html стоит своя новая флешка ??
Что для этого лучше сделать ?

Не уверен, но может как то компиллировать это??

Код:

playpause_mc.onRelease = function() {
        if (playState == true) {
                mySong.stop();
                playState = false;
                playpause_mc.gotoAndStop(1);
        } else {
                mySong.start(mySong.position/1000);
                playState = true;
                playpause_mc.gotoAndStop(2);
        }
};


lelka 07.04.2010 17:21

для того, чтобы плавно погасить музыку, используй лучше TweenMax. Если я правильно понимаю, тебе надо гасить музыку, если юзер переключился на другую страничку. используй событие DEACTIVATE. пусть его stage слушает. Только флешку надо внедрять с помощью swfobject.

AlexMakienko 07.04.2010 20:55

Lelka Ты правильно понимаешь. Подскажи где можно посмотреть о предложенном.
Deactivate это вводится в Action Script новой флешки на html стр. куда уходит Юзер ??

lelka 07.04.2010 21:34

Код AS3:

объявляешь переменные:
private var _channel : SoundChannel;
private var _isMusicPlay:Boolean = true;// флаг, музыку выключили или нет
private var _currentVolume:Number = 1;//текущая громкость
в main-классе в конструкторе пишешь
var sound : Sound = new Sound(new URLRequest("music.mp3"));
_channel = _sound.play(0, 999);
stage.addEventListener(Event.DEACTIVATE, setMusicHandler);
stage.addEventListener(Event.ACTIVATE, setMusicHandler);
и объявляешь функцию
 public function setMusicHandler(event : Event) : void
                  {
 
                        var volume : Number = 0;
 
 
                      if(event.type==Event.ACTIVATE)
                      {
                                if(_isMusicPlay)
                                {
                                volume = _currentVolume;       
                                }
                      }
                        TweenMax.to(_channel, 0.5, {volume:volume});
                }

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


Этот код пишется в первой флешке. В которой музыка редактируется.

AlexMakienko 08.04.2010 04:12

lelka Спасибо большое.
Попробую и отпишу. Пока

Добавлено через 14 часов 48 минут
lelka У меня не получается !

Может действительно сделаешь класс ?
Собственно весь скрипт о музыке приведен в верхнем окне.
Пожалуйста

Добавлено через 16 часов 44 минуты
Братцы в конце концов разобрался !

Собственно в основной (обычно main.swf) флешке всего XML сайта, формирующей исходный вид, меню сайта, переключений и музыки на background, ГАСИТЬ музыку при передаче управления на внешние html стр. надо не в блоке команд управляющих музыкой , (который я приводил выше), а в модуле управления по URL передачи команд по связям - Link (основным mainlink или вспомогательным-sublink).

В моем случае простое введение
Код:

_root.fadeOutMusic();
в классе команд управления по URL

Код:

// Load module and module data (main links)

function loadModule(id) {
        if (linkModule[id] == "url") {
                getURL(linkData[id], "_blank");
               
                _root.fadeOutMusic();

      }
        else {
                if (backgroundMusic == "yes" && musicPref == true) {
                        if (currentVol < 100) {
                    fadeInMusic();
                       
                        }
        }

                clearInterval(_global.intervalID);
                var hideContent:Tween = new Tween(moduleContainer_mc, "_alpha", None.easeOut, moduleContainer_mc._alpha, 0, 0.5, true);
                hideContent.onMotionFinished = function() {
                        moduleData = linkData[id];
                        loadMovie(linkModule[id], moduleContainer_mc);
                        var showContent:Tween = new Tween(moduleContainer_mc, "_alpha", None.easeOut, 0, 100, 0.3, true);
               
                };       
        }
}

При этом группу else { ....... лучше убрать (хотя и с ней работает).

Прав был Juice_Green наша первоначальная дискуссия по XML здесь
http://www.flasher.ru/forum/showthread.php?t=138305

Все замечательно стало работать. При уходе на внешнюю стр. по URL Звук плавно гасится открывая дорогу звуковым делам на новой html странице.
Большое спасибо Juice_Green, Alexcuk и конечно Lelca за интересную и важную подсказку по AS3.
Она мне помогла в другом .swf

lelka 10.04.2010 02:13

Класс, я так понимаю, уже не нужен? :)

AlexMakienko 10.04.2010 14:20

lelka Очень нужен.
Сделай пожалуйста. Потому что, есть еще два XML варианта сайта, там в формирующих основной облик Флешках при уходе не по URL, а при уходе на др. флешки прием описанный выше не срабатывает. Я по AS3 не очень то.

Кстати подскажи пожалуйста.
Что лучше использовать для работы с AS3 Adobe CS3 ???
Я так понимаю он воспринимает и все на AS2 ??
У меня классно работает Flash8 . Там AS2. Может к нему плагины есть ??

Спасибо

lelka 10.04.2010 14:55

Если по AS3 не очень, то используй CS3-4.
Да
Советую перейти хотя бы на CS3. (через 2 дня уже CS5 выйдет :)) про плагины ничего не знаю, но наврядли.
ссылка - http://*****************/files/tccbfziej


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

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