понедельник, марта 31, 2008

Пофреймовый захват параметров трансформации клипов.

Не так давно наткнулся на интересный прием. Дошел я до него самостоятельно, но уверен, он давно известен и используется.

Решает он следующую задачу. На сцене есть некоторое множество клипов. Процесс работы приложения делится на этапы. На каждом этапе, клипы принимают различные положения, масштабируются и поворачиваются. Переходы между этапами - плавные. Клипы каким-либо образом плавно трансформируются занимают новое положение.

Итак, необходимо задать параметры трансформации клипов для каждого этапа. Напрашивается решение - создать массивы параметров трансформации для каждого этапа. При каждой смене этапа, выполнять твин для клипов, соответствующих элементам массива.

Но как создать такой массив с наименьшими затратами? Вручную высчитывать координаты, масштаб и угол поворота - задача не для слабонервных (к которым мы все относимся :) ).

Решение: Создаем таймлайн, в котором каждый фрейм соответствует этапу. Во фреймах располагаем наши клипы в надлежащих положениях. Важно, чтобы количество и имена клипов не изменялись (иначе на каких-то этапах клипы будут отображаться некорректно, хотя, эту особенность тоже можно использовать в своих целях).

Создаем массив для сбора трансформаций.
Каждый элемент массива, это характеристика одного этапа. Это может быть ассоциативный массив, у которого в качестве ключей используются идентификаторы этапов. Он содержит идентификатор этапа и массив трансформаций клипов на этом этапе.

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

В итоге получаем двумерный массив. По Y - этапы, по X - клипы.

Теперь Для каждого фрейма делаем сканирование for..in, получаем параметры трансформации клипов и заполняем наш массив. Можно контролировать сбор информации, указав функционально-специфичные имена для различных групп клипов.

Сканирование каждого фрейма можно реализовать вызовом из этого фрейма сканирующей функции с параметром-идентификатором этапа.

В последнем фрейме (последнего этапа) нужно вызвать функцию окончания сканирования. Эта функция должна позиционировать основной клип на начальный этап и остановить. В качестве начального, можно выбрать любой из этапов (идентификатор которого как раз можно передать в качестве параметра функции окончания сканирования).

На этом, навигация по таймлайну заканчивается. Вся анимация отдается в руки программного твина. При вызове функции перехода на новый этап, из массива этапов выделяется соответствующий элемент с массивом трансформаций. Всем клипам, полученным при переборе массива трансформаций назначается твин с соответствующими параметрами.

Изложенное на словах проще выразить в коде :). Постараюсь выложить.

1 комментарий:

Анонимный комментирует...

Восхищен