PDA

Просмотр полной версии : Сценарии эффектов


deep_freeze
15.06.2007, 15:44
Собственно, задумался я над такой мыслю - работаю сейчас над одним проектом с кучей кастомовых элементов управления. Естественно, всё нужно сделать красиво, чтобы всё футуристично выезжало / заезжали, исчезало, становилось полупрозрачным и так далее.

Возникла необходимость в автоматизации эффектов. Например, есть у нас три текстовых поля, которые должны выезжать из-за верхенго угла экрана, занимать свои места по центру экрана и потом из полупрозрачных становиться непрозрачными (alpha = 0.3 -> alpha = 1). Вся эта нехитрая анимация состоит из действий:

1. выезд первого элемента на центр экрана
2. пауза 1000 мс
3. выезд второго элемента на центр экрана
4. пауза 1000 мс
5. выезд третьего элемента на центр экрана
6. пауза 1000 мс
7. Одновременное постепенное изменение alpha всех троих текстовых полей.

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

Ну, и сел я за написание классов для автоматизации анимации.

Класс FxSet, скажем, содержит поле targets, которое является массивом объектов типа UIComponent (это, собственно, ссылки на объекты, к которым будут применяться эффекты), поле effects, которое является массивом объектов типа Fx (занимается, собственно, самой реализацией эффекта).

(Fx)
|- MoveFx
|- ScaleFx
|- FadeFx
|- RotateFx
|- SoundFx

MoveFx, ScaleFx, FadeFx, RotateFx, SoundFx - наследники класса Fx. Каждый наследник обладает ф-цией start(), что запускает эффект. Каждый эффект имеет свою длительность и специфичные параметры (х, у координаты, значения альфа-канала и т.д...).

В массиве targets объекта FxSet каждый элемент UIComponent имеет поле типа Number - номер группы, чтобы можно было ссылаться на то, к каким именно компонентам должен применяться эффект.

Можно настроить FxSet, чтобы эффекты применялись к визуальным компонентам по очереди или одновременно, в асинхонном режиме или с ожиданием завершения предыдущего эффекта.

Описание такого сценария эффектов можно поместить в XML-документ и передавать объекту FxSet этот XML-код. После этого достаточно лишь добавить в FxSet targets и запустить всё это действо.


..................

Собственно, сам вопрос... Предложенная мною система очень сложна и громоздка. Стоит ли вообще её юзать для создания сценария эффектов (в компоненте FxSet можно устанавливать последовательность эффектов) или есть уже готовые средства ActionScript 3, про которые я не знаю? Написание подобной вещи займет массу времени, к тому же, даже будучи написанной эта система будет довольно громоздка (чтение сценария из XML займет некоторое время, плюс насоздаётся куча объектов, что будет нагрузкой на ресурсы, плюс размер самого ролика увеличится...).

Стоит ли вообще этим заниматься или разработчики ActionScript 3 создали более простую альтернативу?

За любую помощь буду очень благодарен.

vapes
15.06.2007, 17:23
Такие задачи проще решать с помощью флекса

deep_freeze
15.06.2007, 17:36
Такие задачи проще решать с помощью флекса

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

etc
15.06.2007, 17:43
здесь идеально подойдет алгоритм конвеера, как в конвеере Потапенко:
http://potapenko.com/rus/articles/conveyor.htm

deep_freeze
15.06.2007, 17:47
здесь идеально подойдет алгоритм конвеера, как в конвеере Потапенко:
http://potapenko.com/rus/articles/conveyor.htm

Спасибо огромное! Это именно то, что нужно! :)