Пример наглядного алгоритмического генератора динамически рисует в рабочей области несколько так называемых «спутников», т.е. кругов, двигающихся по круговой орбите. К числу используемых функций относятся следующие:
-
использование API рисования для создания основной фигуры с динамическими свойствами;
-
подключение пользователя к свойствам, используемым при рисовании;
-
перемещение анимации путем очищения рабочей области каждого кадра и последующей перерисовки.
В примере из предыдущего подраздела показана анимация «спутника», выполненная с помощью события
Event.ENTER_FRAME
. Этот пример расширяет предыдущий пример, отображая панель управления с набором ползунков, которые немедленно обновляют отображение нескольких спутников. В данном примере представлена формализация кода во внешние классы и объединение процесса создания спутника в цикл с сохранением ссылки на каждый спутник в массиве
satellites
.
Получить файлы приложения для этого примера можно на странице
www.adobe.com/go/learn_programmingAS3samples_flash_ru
. Файлы с образцами приложения находятся в папке Samples/AlgorithmicVisualGenerator. Папка содержит следующие файлы.
File
|
Описание
|
AlgorithmicVisualGenerator.fla
|
Основной файл приложения в Flash Professional (FLA).
|
com/example/programmingas3/algorithmic/AlgorithmicVisualGenerator.as
|
Класс, предоставляющий основные функциональные возможности приложения, включая создание спутников в рабочей области и ответ на события с панели управления для обновления переменных, оказывающих влияние на процесс создания спутников.
|
com/example/programmingas3/algorithmic/ControlPanel.as
|
Класс, управляющий использованием нескольких ползунков и отправляющий возникающие события.
|
com/example/programmingas3/algorithmic/Satellite.as
|
Класс, представляющий объект отображения, вращающийся по орбите вокруг центральной точки и содержащий свойства, относящиеся к его текущему состоянию рисования.
|
Установка прослушивателей
Сначала приложение создает три прослушивателя. Первый прослушивает отправленное с панели управления событие о необходимости обновления спутников. Второй прослушивает изменения размера рабочей области SWF-файла. Третий прослушивает каждый проходящий кадр SWF-файла, используя для перерисовки функцию
doEveryFrame()
.
Создание спутников
По окончании установки прослушивателей, вызывается функция
build()
. Эта функция сначала вызывает функцию
clear()
, очищающую массив
satellites
и удаляющую все предыдущие рисунки из рабочей области. Это необходимо, т.к. функция
build()
вызывается повторно всякий раз, когда с панели управления отсылается событие о необходимости выполнения этого действия, например, при изменении настроек цветов. В этом случае спутники необходимо удалить и создать заново.
После этого функция создает спутники путем настройки требуемых исходных свойств, таких как переменная
position
, начинающаяся с произвольной позиции на орбите, и переменная
color
, которая в этом примере не изменяется влоть до момента создания спутника.
По окончании создания к каждому спутнику в массиве
satellites
добавляется ссылка. Вызов функции
doEveryFrame()
обновляет все спутники в данном массиве.
Обновление позиции спутника
Функция
doEveryFrame()
является основной для процесса анимации приложения. Она вызывается для каждого кадра с коэффициентом, равным коэффициенту кадров SWF-файла. Так как переменные рисунка меняются незначительно, у пользователя возникает ощущение просмотра анимации.
Эта функция сначала удаляет все предыдущие рисунки и перерисовывает фон. Затем она объединяет в цикл все контейнеры спутников, увеличивает для каждого спутника значение свойства
position
, а также обновляет свойства
radius
и
orbitRadius
, которые можно изменить с помощью панели управления. Наконец, с помощью вызова метода
draw()
класса Satellite выполняется обновление спутника и его перемещение на новую позицию.
Следует отметить, что счетчик
i
увеличивает значения только до переменной
visibleSatellites
. Это происходит по той причине, что когда пользователь с панели управления ограничивает число отображаемых спутников, оставшиеся в цикле спутники не должны повторно создаваться, а вместо этого должны быть скрыты. Это происходит в цикле, идущем сразу же после цикла, отвечающего за рисование.
По завершении выполнения функции doEveryFrame() происходит обновление числа
visibleSatellites
на всем экране.
Ответная реакция на действия пользователя
Пользователь взаимодействует с системой через панель управления, управляемую классом ControlPanel. Данный класс устанавливает прослушиватель вместе с индивидуальным для каждого ползунка минимальным, максимальным значением, а также значением по умолчанию. При перемещении пользователем этих ползунков вызывается функция
changeSetting()
. Эта функция обновляет свойства панели управления. Если для изменения требуется повторное создание отображения, отправляется событие, которое впоследствии обрабатывается в основном файле приложения. Как только настройки панели управления изменены, функция
doEveryFrame()
создает каждый спутник с применением обновленных переменных.
Дальнейшие настройки
Этот пример является только базовой схемой, представляющей способ создания визуальных объектов с помощью API рисования. В целом, в этом примере участвует несколько строк кода для создания довольно сложной интерактивной среды. Тем не менее, рамки этого примера можно расширить с минимальными изменениями. Вот некоторые из способов.
-
С помощью функции
doEveryFrame()
можно увеличить значение цвета спутника.
-
С помощью функции
doEveryFrame()
можно уменьшить или увеличить радиус спутника.
-
Не обязательно, чтобы радиус спутника имел форму окружности; например, для перемещения в соответствии с синусоидальной волной может использоваться класс Math.
-
Спутники могут использовать функцию определения столкновений с другими спутниками.
API рисования можно использовать в качестве варианта для создания визуальных эффектов в среде разработок Flash, а также для создания базовых фигур во время выполнения. Его также можно использовать для создания многочисленных визуальных эффектов, которые невозможно создать вручную. Благодаря использованию API рисования и математики пользователь ActionScript обладает всем для реализации большого количества неожиданных и оригинальных идей.
|
|
|