Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   плавное "выкл." "вкл." звука (http://www.flasher.ru/forum/showthread.php?t=124700)

dedsky 06.05.2009 17:42

плавное "выкл." "вкл." звука
 
Вложений: 1
Смысл такой, есть кнопка выкл/вкл звука. При выключении таймером через каждую 0,1 сек снижается громкость до 0. Обратно также. Вот набросал код:
Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.media.SoundTransform;
    import flash.utils.Timer;
        import flash.events.TimerEvent;
        import flash.net.URLRequest;
 
    public class ShortTimer extends MovieClip
    {
                public var snd:Sound;
                public var chnl:SoundChannel;
                public var transf:SoundTransform;
                public var position:uint;
                public var timerVol:Timer = new Timer(100);
                public var flag:Boolean;
 
        public function ShortTimer() 
        {
                        flag = true;
                        sndBtn.buttonMode = true;
                        snd = new Sound(new URLRequest("Urban birds.mp3"));
                        chnl = snd.play(0, 10000);
                        transf = new SoundTransform();
                        sndBtn.addEventListener(MouseEvent.CLICK, onSndBtnClicked);
            timerVol.addEventListener(TimerEvent.TIMER, onTimerListener);
                        trace(transf.volume);
        }
 
                //кнопка
                public function onSndBtnClicked(event:MouseEvent):void
                {
                        timerVol.start();
                        sndBtn.play();// у sndBtn два кадра: "выкл." и "вкл."
                        chnl.soundTransform = transf;
                        flag = !flag;
                }
 
                //таймер
        public function onTimerListener(event:TimerEvent):void 
        {
                        if (flag)
                        {
                                transf.volume += .1;
                        } else
                        {
                                transf.volume -= .1;
                        }
 
                        //не выходить из пределов от 0 до 1
                        if (transf.volume >= 1)
                        {
                                transf.volume = 1;
                                timerVol.reset();
                        }else if(transf.volume <= 0)
                        {
                                transf.volume = 0;
                                timerVol.reset();
                        }
                        trace("transf.volume = " + transf.volume);
        }
    }
}

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

Vas717 06.05.2009 19:12

Код AS3:

package  
{
        import flash.display.MovieClip;
        import flash.events.MouseEvent;
        import flash.media.Sound;
        import flash.media.SoundChannel;
        import flash.media.SoundTransform;
    import flash.utils.Timer;
        import flash.events.TimerEvent;
        import flash.net.URLRequest;
 
    public class ShortTimer extends MovieClip
    {
                public var snd:Sound;
                public var chnl:SoundChannel;
                public var transf:SoundTransform;
                public var position:uint;
                public var timerVol:Timer = new Timer(10);
                protected var volume:Number = 1;
                public var flag:Boolean;
 
        public function ShortTimer() 
        {
                        flag = true;
                        sndBtn.buttonMode = true;
                        snd = new Sound(new URLRequest("simple.mp3"));
                        chnl = snd.play(0, 10000);
 
                        transf = new SoundTransform( 1 );
 
                        sndBtn.addEventListener(MouseEvent.CLICK, onSndBtnClicked);
            timerVol.addEventListener(TimerEvent.TIMER, onTimerListener);
                        trace(transf.volume);
        }
 
                //кнопка
                public function onSndBtnClicked(event:MouseEvent):void
                {
                        timerVol.start();
                        sndBtn.play();// у sndBtn два кадра: "выкл." и "вкл."
                        //chnl.soundTransform = transf;
 
                        flag = !flag;
                }
 
                //таймер
        public function onTimerListener(event:TimerEvent):void 
        {
                        if (flag)
                        {
                                volume += .01;
 
                        } else
                        {
                                volume -= .01;
                        }
 
 
                        //не выходить из пределов от 0 до 1
                        if (volume > 1)
                        {
                                volume = 1;                               
                                timerVol.reset();
                        }
                        if ( volume < 0 )
                        {
                                volume = 0;
                                timerVol.reset();
                        }
 
                        setVolume ();       
 
                        trace("transf.volume = " + transf.volume);
        }
 
                private function setVolume ()
                {
                        transf.volume = volume;
                        chnl.soundTransform = transf;
                }
 
    }
}


dedsky 07.05.2009 10:06

вах!
из серии детских загадок "найди десять различий"
Спасибо!

Всего-то надо было переставить chnl.soundTransform = transf из кнопки в таймер


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

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