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

AzagThoth 24.04.2010 11:02

Только вот этого
Код AS1/AS2:

var muz:Sound = new Sound();

Лучше всегда избегать. Ибо созданный звук будет управлять всеми звуками существующими в фильме.
Предлагаю делать так
Код AS1/AS2:

createEmptyMovieClip("clip",getNextHighestDepth());
var muz:Sound = new Sound(clip);


studmar 24.04.2010 12:26

Цитата:

Сообщение от mooncar (Сообщение 903066)
Ставьте звук на паузу вместо stop() .
Для этого перед остановкой можно запомнить позицию (Sound.position property). И запускать уже с нужной позиции.
Только следует учесть, что position берется в миллисекундах, а офсет в start() выставляется в секундах, так что округляйте.

А Вы можете показать как это в коде выглядело бы?

AzagThoth 24.04.2010 12:39

Код AS1/AS2:

snd.stop()
position=snd.position;
snd.start(Math.floor(position/1000));


studmar 24.04.2010 12:54

Цитата:

Сообщение от AzagThoth (Сообщение 903084)
Код AS1/AS2:

snd.stop()
position=snd.position;
snd.start(Math.floor(position/1000));


К сожалению, работает некорректно, при повторном наведении музыка воспроизводится вроде с того же места, но, поскольку как бы снова срабатывает rollOver, то запускается еще раз и получаются дублирующие каналы (не знаю, правильно ли объяснил)

вот код:
Код AS1/AS2:

createEmptyMovieClip("clip",getNextHighestDepth());
var muz:Sound = new Sound(clip);
muz.loadSound("s1.mp3", false);
 
btn.onRollOver = function () {
muz.start();
muz.setVolume(25);
};
 
btn.onRollOut = fadeOutSound;
 
function fadeOutSound():Void {
    if (id) {
        clearInterval(id);
    }
    var volume = muz.getVolume();
    id = setInterval(fadeOut, 10);
    function fadeOut():Void {
        muz.setVolume(volume--);
        if (volume<=0) {
            clearInterval(id);
            muz.stop()
                        position=muz.position;
                        muz.start(Math.floor(position/1000));
        }
    }
}


AzagThoth 24.04.2010 13:00

Код AS1/AS2:

createEmptyMovieClip("clip",getNextHighestDepth());
var muz:Sound = new Sound(clip);
var position:Number=0;
muz.loadSound("s1.mp3", false);
 
btn.onRollOver = function () {
muz.start(Math.floor(position/1000));
muz.setVolume(25);
};
 
btn.onRollOut = fadeOutSound;
 
function fadeOutSound():Void {
    if (id) {
        clearInterval(id);
    }
    var volume = muz.getVolume();
    id = setInterval(fadeOut, 10);
    function fadeOut():Void {
        muz.setVolume(volume--);
        if (volume<=0) {
            clearInterval(id);
            muz.stop()
            position=muz.position;
        }
    }
}


studmar 24.04.2010 13:06

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

AzagThoth 24.04.2010 13:20

Опишите обработчик функции onSoundComplete
Адекватный на сегодняшний день хелп по AS2 можете взять тут: http://nnm-club.ru/forum/viewtopic.php?t=192686

studmar 24.04.2010 13:26

Цитата:

Сообщение от AzagThoth (Сообщение 903093)
Опишите обработчик функции onSoundComplete

Вы можете показать пример?
Хелп я посмотреть могу, но правильно применить - тут проблема..
Я не совсем понимаю как это сделать ибо не программист, и поэтому делаю все методом "тыка"

AzagThoth 24.04.2010 13:35

В вашем случае достаточно сделать так.
Код AS1/AS2:

muz.onSoundComplete=function():Void{
    position=0;
    flag=true;
}

Флаг переменная со значением булево. В Вашей функции фадеОут проверяете и если она true то присваиваете false, а также не переопределяете переменную position. В противном случае переопределяете.

studmar 24.04.2010 13:54

Покопавшись в сети, попробовал сделать, вот что получилось:
Код AS1/AS2:

createEmptyMovieClip("clip",getNextHighestDepth());
var muz:Sound = new Sound(clip);
var position:Number=0;
muz.loadSound("s1.mp3", false);
muz.onSoundComplete=function():Void{
    position=0;
    flag=true;
}
 
btn.onRollOver = function () {
        muz.start(Math.floor(position/1000));
        muz.setVolume(25);
        };
 
btn.onRollOut = fadeOutSound;
 
function fadeOutSound():Void {
 
          if (id) {
        clearInterval(id);
    }
    var volume = muz.getVolume();
    id = setInterval(fadeOut, 10);
    function fadeOut():Void {
        muz.setVolume(volume--);
        if (volume<=0) {
            clearInterval(id);
              muz.stop()
 
                if (flag == true) {
                flag == false;
                }
                else {
                position=muz.position;               
                }
        }
    }
}

Вроде работает, как и надо, но срабатывает все один раз: при наведении файл воспроизводится, при отводе "затухает", если снова навести - проигрывается с того же места - все ок. После того как файл проигрался и мышка остается в поле movieclip - ничего не происходит - так и должно быть, затем если отвести и подвести вновь - файл воспроизведется, но если отвести и подвести еще раз - он начнет играть с начала, а не стого же месте, т.о. реально все работает только при одном цикле.


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

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