Опубликован: 04.11.2006 | Уровень: специалист | Доступ: платный
Урок 16:

Звук и ActionScript

< Урок 15 || Урок 16: 12345 || Урок 17 >

Присоединение звуковых клипов и управление проигрыванием

В нединамических проектах звукозаписи помещаются непосредственно на монтажный стол, и им управляются. Иными словами, если вы хотите, чтобы в фильме звучала некая звукозапись, вы должны перетащить ее из библиотеки на монтажный стол и обозначить, когда, как долго и сколько раз она должна воспроизводиться. Для многих проектов этого вполне достаточно, но мы-то с вами ActionScript’еры – мы хотим управлять всем! И потому в этом упражнении мы научим вас, как оставить звукозаписи в библиотеке и вызывать их оттуда по мере надобности. Вы узнаете о применении еще нескольких методов объекта Sound, позволяющих добавлять звукозаписи в фильм и управлять их воспроизведением, причем все это – "на лету".

Что самое замечательное, что можно сделать с созданным во Flash объектом типа Sound? Присоединить к нему звукозапись, то есть "вытащить" ее из библиотеки, и в дальнейшем воспроизводить ее и останавливать, когда заблагорассудится.

Но для этого сначала необходимо назначить библиотечным звукозаписям имена-идентификаторы. Если звукозапись имеет идентификатор, ее можно присоединить к объекту Sound и затем управлять ее воспроизведением, а также громкостью и балансом, как мы делали ранее в этом уроке.

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

on (release) {
  music = new Sound ();
  music.attachSound ("rockMusic");
  music.start (0, 5);
}

Первая строка этого скрипта показывает, что он будет выполняться, когда отпущена после нажатия некая кнопка, к которой скрипт присоединен. При выполнении скрипта сначала создается новый объект типа Sound под именем music. Затем к этому объекту присоединяется звукозапись "rockMusic" (из библиотеки). Следующая строка начинает проигрывание этого объекта Sound – это значит, что начнется воспроизведение звукозаписи "rockMusic" (поскольку именно она присоединена к этому объекту). Первый параметр (0) в этом действии показывает, сколько секунд от начала звукозаписи следует пропустить. Например, предположим, что в "rockMusic" имеется гитарное соло, начинающееся на 20-й секунде. Тогда если вместо 0 мы подставим 20, то воспроизведение этой записи начнется не с начала, а прямо с этого гитарного соло. Второй параметр, который у нас равен 5, показывает, сколько раз следует повторить воспроизведение записи. В нашем случае звукозапись будет повторена пять раз, и лишь после этого остановится.

Добавим, что вместо конкретных значений параметров можно указывать имена переменных, что открывает широчайшие возможности.

В следующем упражнении мы покажем, как присоединить к объекту Sound случайно выбранную из библиотеки звукозапись и запустить ее воспроизведение нажатием кнопки мыши. Число повторов звукозаписи тоже будет случайным. Кроме того, мы запрограммируем возможность остановки воспроизведения нажатием любой клавиши на клавиатуре.

  1. Откройте файл basketball5.fla из папки Lesson16/Assets.

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

  1. Командой меню Окно > Библиотека (Window > Library) откройте панель Библиотека (Library).

В библиотеке имеется папка под названием Dynamic Sounds. В этой папке вы найдете три звукозаписи, импортированные в проект. Эти звуковые клипы существуют только в библиотеке; ни на одном из монтажных столов проекта они не присутствуют.


  1. Щелчком мыши выделите звукозапись Sound 0. В меню опций библиотеки выберите пункт Связи (Linkage).

Откроется диалоговое окно Свойства связи (Linkage Properties). Именно здесь мы можем присвоить звуковому клипу имя-идентификатор.

  1. Установите флажок Экспорт для ActionScript (Export for ActionScript) и дайте этой звукозаписи имя Sound0.

Примечание Подробно о настройках этого диалогового окна рассказано в Уроке 14 – Динамическое управление фильмами-символами.

Мы поставили в конце имени клипа цифру не просто так. Наш скрипт будет генерировать случайные числа от 0 до 2. Если выпадет 0, проигрывается звукозапись Sound0, если 1 – Sound1, если 2 – Sound2.

Присвоив идентификатор, нажмите кнопку OK.

  1. Повторите шаги 3 и 4 для библиотечных клипов Sound 1 и Sound 2.

Аудиоклипу Sound 1 присвойте идентификатор Sound1, а клипу Sound 2идентификатор Sound2.

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

Итак, теперь мы имеем в библиотечной папке Dynamic Sounds три звукозаписи с идентификаторами Sound0, Sound1 и Sound2. Пора использовать их в скриптах.

  1. Выделите экземпляр клипа basketball, откройте панель Действия. После строки скрипта, создающей объект Sound bounce, с которым мы прежде работали, вставьте следующую строку:
dynaSounds = new Sound();

Этим мы создаем новый объект Sound под названием dynaSounds. Как и объект bounce, этот объект Sound будет создан, как только экземпляр клипа basketball будет загружен в сцену. Когда это случится, в нашем проекте будет два объекта типа Sound, один из которых управляет звуком скачущего мяча, а другой (только что добавленный) будет случайным образом выбирать и воспроизводить один из трех библиотечных звуков.

Обратите внимание, что, создавая этот объект Sound, мы не связали его с каким-либо монтажным столом. Наш новый объект Sound будет ассоциирован со всем проектом – так сказать, "универсальный", "общий" объект Sound.

  1. В конец текущего скрипта добавьте следующие строки:
onClipEvent (mouseDown) {
  randomSound = random (3);
  randomLoop = random (2) + 1;
  dynaSounds.attachSound ("Sound" + randomSound);
  dynaSounds.start (0, randomLoop);
}

Скрипт помещен в обработчик события mouseDown, и потому будет выполнен, если кнопка мыши будет нажата (в любом месте сцены). Вот что скрипт делает:

Во первых, действие random(3) генерирует случайное число от 0 до 2 и присваивает его переменной randomSound. Далее это случайное число будет определять, какая из библиотечных звукозаписей будет присоединена к объекту Sound dynaSounds и затем проиграна.

В следующей строке нашего скрипта присваивается значение переменной randomLoop – тоже на основе случайного числа. Это значение будет определять, сколько раз должна быть воспроизведена звукозапись. Обратите внимание: здесь переменной присваивается не просто случайное число – мы к нему еще прибавляем единицу. Если этого не сделать, действие random(2) выдаст 0 либо 1. Присвоить переменной randomLoop значение 0 мы не можем – нельзя проиграть звукозапись "ноль раз". Поэтому мы прибавляем 1, и теперь переменная будет получать значение 1 (0+1) или 2 (1+1); таким образом, звукозапись будет проигрываться либо один раз, либо дважды.

Важный совет Этот прием можно использовать всякий раз, когда случайное число должно находиться внутри некоего диапазона, начинающегося не с нуля. Например, выражение random(51) + 50 ; будет генерировать случайные числа от 50 до 100. Вот в чем суть фокуса:

  1. Определить максимально возможное генерируемое число (скажем, 500)
  2. Определить наименьшее возможное число (скажем, 150)
  3. Вычесть меньшее число из большего (в нашем примере получим 350)
  4. Прибавьте к этому результату 1 (в нашем примере будет 351). Это необходимый шаг, поскольку у функции random() диапазон генерируемых чисел всегда начинается с 0.
  5. Запишите окончательное выражение (в нашем примере это будет выражение random(351) + 150, генерирующее случайные числа от 150 до 500).

Сгенерированные нашим скриптом два случайных числа используются в двух оставшихся строках.

dynaSounds.attachSound ("Sound" + randomSound);

Это действие присоединяет к объекту dynaSounds библиотечную звукозапись, имя (идентификатор) которой получается в результате присоединения к строке "Sound" значения randomSound. Если, к примеру, randomSound равно 2, то мы получим следующее действие:

dynaSounds.attachSound ("Sound2");

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

Наконец, последняя строка скрипта воспроизводит этот объект Sound:

dynaSounds.start (0, randomLoop);

Этим действием запускается проигрывание текущей присоединенной к объекту Sound звукозаписи. Что касается двух параметров, то 0 означает, что запись должна воспроизводиться с самого начала, а значение randomLoop определяет число повторений записи (один раз или два).

  1. В конец текущего скрипта добавьте следующие строки:
onClipEvent (keyDown) {
  dynaSounds.stop ();
}

Обработчик события keyDown будет запускать на выполнение эту строку скрипта – при нажатии любой клавиши на клавиатуре. Выполнение же приведет к остановке проигрывания объекта Sound dynaSounds, не дожидаясь, когда она завершится.

  1. Командой Управление > Проверить фильм (Control > Test Movie) запустите тест фильма.

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

  1. Закройте тестовый фильм и вернитесь в среду разработки. Сохраните файл под именем basketball6.fla.

На этом наш проект завершен! Вы узнали, как, управляя звуком динамически, привнести дополнительный реализм, и тем сделать проект более красивым и запоминающимся. Вы теперь знаете об управлении звуком почти все, кроме, разве что, загрузки из внешних источников – об этом мы расскажем в Уроке 17, Загрузка внешних материалов.

< Урок 15 || Урок 16: 12345 || Урок 17 >
Салтанат Бектегенова
Салтанат Бектегенова

Дострочное пересдача экзамена

 

Евгений Стародубцев
Евгений Стародубцев

Вот задание:

7. Открыв панель Действия (Actions) и установив ее в Экспертный режим(Expert Mode), выделите кадр 1 слоя Actions и введите следующий скрипт:

Евгения Дегтяренко
Евгения Дегтяренко
Украина, Запорожье
Анна Елисеева
Анна Елисеева
Россия, Великий Новгород, Ногородский государственный университет имени Ярослава Мудрого, 2003