Дострочное пересдача экзамена
|
Звук и ActionScript
Присоединение звуковых клипов и управление проигрыванием
В нединамических проектах звукозаписи помещаются непосредственно на монтажный стол, и им управляются. Иными словами, если вы хотите, чтобы в фильме звучала некая звукозапись, вы должны перетащить ее из библиотеки на монтажный стол и обозначить, когда, как долго и сколько раз она должна воспроизводиться. Для многих проектов этого вполне достаточно, но мы-то с вами 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 случайно выбранную из библиотеки звукозапись и запустить ее воспроизведение нажатием кнопки мыши. Число повторов звукозаписи тоже будет случайным. Кроме того, мы запрограммируем возможность остановки воспроизведения нажатием любой клавиши на клавиатуре.
- Откройте файл basketball5.fla из папки Lesson16/Assets.
Если вы не закрыли файл после выполнения предыдущего упражнения, продолжайте работать с ним.
- Командой меню Окно > Библиотека (Window > Library) откройте панель Библиотека (Library).
В библиотеке имеется папка под названием Dynamic Sounds. В этой папке вы найдете три звукозаписи, импортированные в проект. Эти звуковые клипы существуют только в библиотеке; ни на одном из монтажных столов проекта они не присутствуют.
- Щелчком мыши выделите звукозапись Sound 0. В меню опций библиотеки выберите пункт Связи (Linkage).
Откроется диалоговое окно Свойства связи (Linkage Properties). Именно здесь мы можем присвоить звуковому клипу имя-идентификатор.
- Установите флажок Экспорт для ActionScript (Export for ActionScript) и дайте этой звукозаписи имя Sound0.
Примечание Подробно о настройках этого диалогового окна рассказано в Уроке 14 – Динамическое управление фильмами-символами.
Мы поставили в конце имени клипа цифру не просто так. Наш скрипт будет генерировать случайные числа от 0 до 2. Если выпадет 0, проигрывается звукозапись Sound0, если 1 – Sound1, если 2 – Sound2.
Присвоив идентификатор, нажмите кнопку OK.
- Повторите шаги 3 и 4 для библиотечных клипов Sound 1 и Sound 2.
Аудиоклипу Sound 1 присвойте идентификатор Sound1, а клипу Sound 2 – идентификатор Sound2.
Примечание Учтите, что имена библиотечных элементов могут содержать пробелы, а имена-идентификаторы – нет. Присваивая идентификаторы, следуйте тем же правилам, что и для имен переменных и объектов.
Итак, теперь мы имеем в библиотечной папке Dynamic Sounds три звукозаписи с идентификаторами Sound0, Sound1 и Sound2. Пора использовать их в скриптах.
- Выделите экземпляр клипа basketball, откройте панель Действия. После строки скрипта, создающей объект Sound bounce, с которым мы прежде работали, вставьте следующую строку:
dynaSounds = new Sound();
Этим мы создаем новый объект Sound под названием dynaSounds. Как и объект bounce, этот объект Sound будет создан, как только экземпляр клипа basketball будет загружен в сцену. Когда это случится, в нашем проекте будет два объекта типа Sound, один из которых управляет звуком скачущего мяча, а другой (только что добавленный) будет случайным образом выбирать и воспроизводить один из трех библиотечных звуков.
Обратите внимание, что, создавая этот объект Sound, мы не связали его с каким-либо монтажным столом. Наш новый объект Sound будет ассоциирован со всем проектом – так сказать, "универсальный", "общий" объект Sound.
- В конец текущего скрипта добавьте следующие строки:
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. Вот в чем суть фокуса:
- Определить максимально возможное генерируемое число (скажем, 500)
- Определить наименьшее возможное число (скажем, 150)
- Вычесть меньшее число из большего (в нашем примере получим 350)
- Прибавьте к этому результату 1 (в нашем примере будет 351). Это необходимый шаг, поскольку у функции random() диапазон генерируемых чисел всегда начинается с 0.
- Запишите окончательное выражение (в нашем примере это будет выражение 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 определяет число повторений записи (один раз или два).
- В конец текущего скрипта добавьте следующие строки:
onClipEvent (keyDown) { dynaSounds.stop (); }
Обработчик события keyDown будет запускать на выполнение эту строку скрипта – при нажатии любой клавиши на клавиатуре. Выполнение же приведет к остановке проигрывания объекта Sound dynaSounds, не дожидаясь, когда она завершится.
- Командой Управление > Проверить фильм (Control > Test Movie) запустите тест фильма.
Когда фильм запустится в среде тестирования, щелчок мышью в любом месте приведет к запуску случайно выбранной звукозаписи из библиотеки. Если теперь нажать клавишу на клавиатуре, воспроизведение будет прекращено.
- Закройте тестовый фильм и вернитесь в среду разработки. Сохраните файл под именем basketball6.fla.
На этом наш проект завершен! Вы узнали, как, управляя звуком динамически, привнести дополнительный реализм, и тем сделать проект более красивым и запоминающимся. Вы теперь знаете об управлении звуком почти все, кроме, разве что, загрузки из внешних источников – об этом мы расскажем в Уроке 17, Загрузка внешних материалов.