Иллюстрированный самоучитель по Web-графике

Управление звуком

Теперь создадим в этом символе новый слой и поместим туда polzunok_MC_volume. Слой с ползунком должен быть выше слоя со шкалой. Поставим ползунок в центре шкалы и назначим ему такое действие:

onClipEvent(enterFrame) {
    root.zvuk.setVolume(this.x);
}

Этим мы добьемся того, что звук будет иметь значение, соответствующее координате х ползунка. Теперь переходим на главную сцену и вставляем туда символ shkala_volume. Вот мы и создали элемент управления громкостью звука.

Теперь организуем балансировку звука между левым и правым динамиками. Для этого создадим символ-кнопку с названием polzunok_pan и нарисуем там ползунок, затем создадим символ типа Movie Clip с именем polzunok_MC_pan поместим туда наш polzunok_pan. Зададим ему действие:

on(press) {
    startDrag(this, false);
}
on(release) {
    stopDrag(-100, 0, 100, 0);
}

Теперь создадим еще один символ типа Movie Clip с именем shkala_pan. Нарисуем там нашу шкалу в виде прямоугольника с параметрами, как показано на рисунке:

Иллюстрированный самоучитель по Web-графике › Анимация во Flash › Управление звуком
Рис. 633. Задание координат и размеров шкалы балансировки звука

В этом же символе создадим еще один слой и поместим его выше текущего. В этом слое расположим ползунок polzunok_MC_pan и зададим для него следующее действие:

onClipEvent(enterFrame) {
    root.zvuk.setPan(this.x);
}

Теперь переходим на главную сцену и вставляем в нее шкалу балансировки звука shkala_pan. Посмотрите мультфильм и попробуйте изменить положение ползунков. Если ошибок нет, то все будет работать.

Однако у нас нет цифрового отображения громкости и баланса звука. Давайте разработаем и такой сервис. На главную сцену вставим два динамических текстовых поля. Одно для отображения громкости, другое – для баланса. Назовем их vol и pan соответственно. Сначала займемся полем vol.

Выделим символ shkala_volume и откроем палитру Action для нашего ползунка. Добавим к уже имеющемуся следующий код:

s = new Sound(zvuk);
_root.vol = s.getVolume();

Таким образом, у нас должно получиться следующее:

onClipEvent(enterFrame) {
    root.zvuk.setVolume(this._x);
    s = new Sound(zvuk);
    root.vol = s.getVolume();
}

Теперь пользователь может видеть цифровое значение громкости звука. Займемся организацией цифрового отображения баланса. Для этого перейдем к символу shkala_pan и добавим к его действиям следующий код:

s = new Sound(zvuk);
root.pan = s.getPan();

В результате должно получиться:

onClipEvent(enterFrame) {
    root.zvuk.set Pan(this - _x);
    s = new Sound(zvuk);
    root.pan = s.getPan();
}

Теперь пользователь получает сведения относительно баланса звука. Однако когда ползунок переходит на левую часть шкалы, мы видим отрицательные числа. Обычно в подобных программах отображаются положительные числа и буква "L" или "R". Давайте попробуем сделать так же. Для этого в символе shkala_pan в палитре Actions для ползунка немного изменим существующий код. После замены должно получиться:

onClipEvent(enterFrame) {
    _root.zvuk.setPan(this._x);
    s = new Sound(zvuk);
    if (this._x < 0) {
        _root.pan = -(s.getPan()) + "Left";
    }
    else if (this._x > 0) {
        _root.pan = s.getPan() + "Right";
    }
    else if (this._x = = 0) {
        _root.pan = s.getPan();
    }
}

Здесь мы поставили условие, что если значение координаты х ползунка меньше нуля (т. е. баланс смещается влево), то в поле pan возвращается значение с минусом (отрицательное число с минусом есть положительное число). Кроме того, к Цифровому значению приписывается строка Left. А если баланс смещается вправо, то все остается как есть и еще приписывается Right. Если же значение координаты х равно нулю, то вообще ничего не приписывается. Теперь мы имеем более привычную форму отображения баланса. Таким же способом можно сделать, чтобы при минимальной громкости выводилось бы, например "OFF" или "Выкл.", а при максимальном значении – "МАХ". Для этого нужно лишь заменить код для ползунка в символе shkala_volume на следующий:

_root.zvuk.set Volume(this._x);
s = new Sound(zvuk);
if (this._x == 0) {
    root.vol = "Выкл.";
}
else if (this._x == 100) {
    _root.vol = "MAX";
}
else {
    _root.vol = s.getVolume();
}
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.