Особенности применения языка сценариев ActionScript

Некоторые особенности применения языка сценариев ActionScript

Идентификация экземпляров. Итак, приступим к рассмотрению различных особенностей применения сценариев ActionScript. Одновременно будем обращать внимание на элементы языка, не описанные ранее.

Имена экземпляров флэш-символов в ролике. Начнем с небольшого примера. Он покажет, как управлять экземплярами флэш-символов из основного ролика или из любого встроенного объекта. Описание ролика. Предположим, имеется ролик, в котором объекты движутся по экрану навстречу друг другу. Поскольку рисунок в книге не может воспроизвести анимацию, опишем этот ролик немного подробнее. Графический объект Wheel-static содержит изображение колеса. Этот объект помещен в мувик Wheel. В позиции 35 мувика Wheel создан ключевой кадр с тем же изображением и кодом gotoAndPlay(1). В первом кадре создана анимация движения и задан режим поворота по часовой стрелке (CW) 1 раз. Второй мувик, Car-static, содержит изображение силуэта машины и два мувика Wheel в качестве колес. Анимацию движения машины обеспечивает мувик Car. Он содержит мувик Car-static. В позиции 60 имеется еще один ключевой кадр, в котором мувик Car-static сдвинут далеко вправо. Между этими кадрами создана анимация движения. В основной ролик помещены шесть экземпляров мувика Car. Три из них сдвинуты за границу рабочей области влево, а три - вправо. Те, что справа, развернуты в горизонтальной плоскости командой Flip Horizontal (Отразить по горизонтали).

Теперь мы хотим нажатием на разные клавиши останавливать движение некоторых машинок. Для чего это может потребоваться - сейчас неважно, пофантазируйте сами. Например, пусть клавиши 1, 2 и 3 останавливают, соответственно, верхнюю, среднюю и нижнюю машинки из движущихся слева направо. Для этого экземплярам мувика Car надо дать имена. Вообще говоря, тем экземплярам мувиков, которым имена не даны, программа присваивает их самостоятельно. В этом можно убедиться, нажав во время просмотра ролика клавиши CTRL+L. Это сочетание открывает список объектов. Вот как он выглядит для только что описанного ролика. Как видите, каждому экземпляру каждого мувика дано имя, состоящее из слова instance (экземпляр) и номера экземпляра. Однако согласитесь, что разобраться в том, какое имя какому мувику соответствует, нелегко. К тому же, приведенный выше листинг соответствует очень простому ролику, а в более сложном ролике дело может обстоять еще хуже. Поэтому лучше, если имена экземплярам даст автор ролика, причем имена осмысленные. В данном случае вполне подойдут имена саr1, car2 и car3. Напишем их в соответствующих полях вспомогательной панели Instance (Экземпляр). Теперь можно добавить в единственный пока кадр основного ролика такой код. Он проверяет, не нажата ли одна из клавиш 1, 2 или 3, и, если это так, останавливает соответствующий мувик. Осталось только добавить в основной ролик обычный кадр в позицию 2, чтобы обеспечить цикличность исполнения кода в первом кадре.

Для проверки знаний попробуйте самостоятельно решить задачку: как останавливать вместе с машинкой и ее колеса, которые (если вы сделали все так, как описано) продолжают крутиться после остановки машины? Доступ к переменным во флэш-символах. Отвлечемся на некоторое время от конкретных примеров и вернемся к теории. Мы видели, что экземпляры флэш-символов могут размещаться друг в друге. Далее, каждый мувик может иметь свои переменные. Причем, если основной ролик содержит переменную а, это совсем не значит, что какой=либо мувик не может содержать переменную с таким же именем. Для них в памяти выделяются различные области, и, следовательно, это совершенно разные переменные.

Теперь представим себе, что внутри нашего мувика с переменными имеется экземпляр другого, «маленького» мувика с именем small. Таким образом, у нас появились независимые объекты. Теперь внутри этого последнего объекта потребовалось создать переменную newvar. Как должен выглядеть код для обращения к ней? Во-первых, независимо от размещения кода, к этой переменной можно обратиться по абсолютному пути. Из основного ролика можно использовать обращение, из мувика - обращение small. newvar, а из мувика small, pacположенного внутри yourmovie - просто newvar. Кроме того, из мувика mymovie можно обратиться к этой переменной так просто. Продолжить цепочку примеров можете самостоятельно. Таким образом, к любому объекту и любой переменной можно обратиться по имени через абсолютный или относительный путь, Это позволяет гибко управлять поведением экземпляров мувиков из любого «уголка» ролика.

Свойства экземпляров

Анимация, приведенная в качестве примера в предыдущем разделе, относительно сложна в управлении. Можно намного упростить задачу, сделав эту анимацию программной. В этом случае мы не создаем множество кадров с различным расположением объектов, а меняем расположение объектов в одном кадре с помощью сценария ActionScript.

Для осуществления программной анимации необходимо читать и изменять значения свойств экземпляров флэш-символов, расположенных в ролике. Эти свойства задают расположение экземпляров, их размер, цвет и так далее. Давайте вначале посмотрим, какие свойства экземпляров доступны сценарию ActionScript. Имена всех свойств, чтобы их было сразу видно, начинаются с символа (подчеркивание). Текущие координаты указателя мыши записываются в свойства. Эти два свойства сильно облегчают жизнь, если нужно отслеживать координаты указателя мыши. В предыдущих версиях языка ActionScript для этого приходилось «прикреплять» к указателю мыши невидимый мувик с помощью оператора startDrag, о котором речь пойдет ниже. Свойства содержат соответственно имя экземпляра мувика и полный путь к нему. Значение свойства можно изменить, а вот свойство изменению не поддается, что вполне логично. Номер текущего кадра можно узнать из свойства. Его значение также невозможно изменить из сценария. Прозрачность экземпляра мувика можно установить с помощью свойства alpha. Не забудьте, что с помощью методов объекта Color setTransform и setRGB - также можно устанавливать как прозрачность экземпляра флэш символа, так и его цвет. Общее количество кадров мувика (или всего основного ролика) можно узнать из свойства totalframes, а количество кадров, уже загруженных на данный момент - из свойства framesloaded. Это значение особенно актуально при загрузке ролика через Интернет. К этим двум свойствам мы еще вернемся, когда речь пойдет о создании предзагрузчиков. Значения свойств totalframes и framesloaded изменить нельзя. Свойство visible управляет видимостью экземпляра. Если оно имеет значение false, мувик не отображается на экране. Свойство uri содержит сетевой адрес, с которого данный ролик был загружен. Значение этого свойства также неизменяемо.

Управление качеством воспроизведения

Качеством воспроизведения видеоряда управляет свойство quality. Оно может принимать четыре значения: Low (Низкое), Medium (Среднее), High (Высокое) и Best (Наилучшее). В режиме Best (наилучшее) кривые сглаживаются по наилучшему алгоритму (с сеткой 4×4), а также сглаживается вся растровая графика. То же самое происходит в режиме High (Высокое), однако здесь растровая графика сглаживается только в статических объектах. В режиме Medium (Среднее) сглаживание кривых происходит с использованием упрощенного алгоритма (сетка 2×2), а растровая графика вообще не сглаживается. В режиме Low (Низкое) не происходит даже сглаживания кривых.
Как видите, повышение качества обеспечивается сглаживанием кривых линий. Чем больше кривых сглаживается, тем больше ресурсов компьютера требуется для прорисовки каждого отдельного кадра. При качестве Best (Наилучшее) многие компьютеры, не успевая прорисовать все кадры сколько-нибудь сложного ролика, начнут просто пропускать кадры. От таких пропусков качество видеоряда ролика страдает заметно сильнее, чем от отсутствия сглаживания некоторых кривых.

Поэтому свойство quality следует устанавливать в зависимости от сложности ролика. Если ролик содержит много объектов и много анимации, если он имеет повышенную частоту кадров или содержит много текстовой информации, лучше предусмотреть переключение качества воспроизведения в режим Medium (Среднее) или даже Low (Низкое). Правда, текст в режиме Medium (Среднее) и, тем более, Low (Низкое) воспринимается крайне плохо, а при небольшом размере шрифта может стать и вообще нечитаемым. Помимо свойства quality, для определения и установки качества воспроизведения иногда используют также устаревшее свойство highquality. Оно может принимать значения 0, 1 или 2, причем значение 2 соответствует наилучшему качеству.

Для настройки воспроизведения звука можно регулировать размер звукового буфера с помощью свойства soundbuftime. При потоковом воспроизведении звука некоторая часть записи предварительно загружается в буфер (чтобы при небольших сбоях в канале связи звук не прерывался). По умолчанию размер звукового буфера равен 5 секундам записи. Значение свойства soundbuftime должно быть целым числом. Если экземпляр мувика повернут в рабочей области относительно своего оригинального расположения, угол его поворота в градусах хранится в свойстве rotation.

Интересно также свойство droptarget. Оно недоступно для изменения и всегда содержит имя экземпляра объекта, над которым находится текущий объект при перетаскивании. Чтобы это свойство имело смысл, к указанному объекту вначале должен быть применен оператор (или метод) startDrag. Об этом мы поговорим позже. Наконец, свойство focusrect применяется весьма редко. Если его значение равно true, то при перемещении фокуса ввода между полями пользовательского ввода с помощью клавиши ТАВ активное поле выделяется желтым прямоугольником. По умолчанию значение этого свойства равно false.