![]() |
|
||||||||||
|
|||||
|
На сколько мне известно, во флэш таковых существует 4: с помощью onEnterFrame, SetInterval, tween-анимация и где-то в глубинах сайта промелькнуло что-то про классы. Очень хотелось бы узнать их отличия: преимущества и недостатки друг перед другом.
Например многие пишут что onEnterFrame и SetInterval при анимации большого количества объектов использовать не рекомендуется, мол будет тормозить на старых машинах. На сколько старые при этом должны быть машины и сложной анимация, что б они при этом тормозили? (или то статьи очень древние?) Может еще есть какие нюансы. Заранее спасибо.
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Программной. Но если попутно будет дано сравнение и для тайм-лайн, буду только за. Информация лишней не бывает.
ЗЫ. Будет подробное сравнение для потомков ![]()
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
В флеше возможны два вида анимации: таймлайн анимация и программная анимация.
------ При таймлайн анимации, на тамлайне указываются только ключевые кадры с объектами, а флеш, в момент компиляция и в зависимости от типа ТА, сам формирует промежуточные кадры методом интерполяции, и в результате в swf хранится информация о содержимом каждого кадра анимации. Таким образом, анимация просчитывается лишь единожды, что уменьшает потребление ресурсов при воспроизведении, однако ее уже невозможно изменить. ТА может быть двух типов: motion-tween и shape-tween. Поскольку motion-tween оперирует с символами, то в ключевых кадрах должен находится один и тот же символ и при интерполяции промежуточных кадров, сама форма внутри символа не меняется, меняются лишь свойства символа: координаты, размеры, углы поворота, сдвиги, цвет и прозрачность. Также МТ имеет возможность пускать объект по кривому и сложному пути. А вот shape-tween оперирует непосредственно с вершинами форм, что дает возможность морфинга - плавное перетекание одной формы в другую в течение промежуточных кадров. Однако разное количество вершин в ключевых формах и их положение (флеш пытается двигать вершины по кратчайшему пути), может дать нам совсем не тот визуальный ряд, который мы планировали. Поэтому при shape-tween сложные формы стоит разбить на более простые и в разных слоях, доведя разницу между количеством вершин до минимума, а также указать их порядок в ключевых формах (с помощью shape hint). Фактически, у motion-tween и shape-tween разная область применения, первый хорош для анимации объекта (символа) в пространстве, а второй для анимации формы символа. Однако у shape-tween есть один минус, поскольку в каждом кадре анимации создается абсолютно новая форма, то в зависимости от ее сложности, размер swf файла может сильно возрасти. А вот МТ на протяжении всей анимации использует один и тот же объект, поэтому расходы на размеры не так уж и велики. ------ В отличие от таймлайн анимации, программная анимация является динамической анимацией, что дает возможность менять ее на ходу, и все изменения рассчитываются в момент выполнения swf. Это положительно влияет на размер при длительной анимации, но за счет потребления дополнительных ресурсов. Как и в таймлайн анимации, в программной анимации возможны те же два типа анимации. Однако, если реализация motion-tween весьма проста, то shape-tween требует персонального подхода к каждой задачи (сам механизм везде тот же, это удаление старого изображения и рисование нового с помощью moveTo, lineTo, curveTo и заливок), а различное количество вершин может сделать задачу трудновыполнимой, поэтому затронем только motion-tween. Анимация делится на два шага: 1. Расчет изменений свойств и трансформация 2. Вывод результата на экран Первый шаг можно выполнить вручную, то есть самому описывать проходящие изменения между соседними фазами и контролировать момент окончания анимации. А можно поручить анимацию фреймфоркам, например Tween или Fuse. Возможности каждого фреймфорка различны, поэтому их описание нужно смотреть в документации. Однако общий смысл у них один, это упрощения создания анимации и контроль за ней. Второй шаг, выполняется автоматически при смене кадров, либо с использованием функции updateAfterEvent в определенных ситуациях. Поскольку сам смысл анимация это постоянные изменения, а функции с расчетом запускается лишь единожды, то нужно что-то, что будет брать на себя периодический запуск. Есть два варианта: 1. onEnterFrame 2. setInterval Довольно часто новички допускают ошибку считая, что цикл for тоже может в этом помочь, однако это не так, так как при for не выполняется второй шаг. В обычном режиме флеш обновляет содержимое экрана согласно фпс, и то не весь экран, а только определенные фрагменты, которое изменились. Причем сначала выполняется весь код данного кадра, а лишь потом происходит обновление экрана. С onEnterFrame все понятно, он работает согласно текущему фпс. А setInterval как был задан - может быстрее, а может медленнее. Однако обновление экране все равно происходит по фпс. То есть, если у вас фпс равен 1, а setInterval был запущен на 250 мс, то он сработает 4 раза (теоретически) за секунду, а обновление произойдет лишь один раз. Однако есть метод updateAfterEvent, который принудительно обновляет экран, и тем самым заставит setInterval 4 раза показать результат своих действий. Или, есть при фпс 1, а setInterval был запущен с повтором каждые 4000 мс, то обновление анимации произойдет только 1 раз за 4 кадра. Поэтому, если вас удовлетворяет текущий фпс, то лучше анимацию вешать на onEnterFrame, если нужно быстрее, то на setInterval, но учитывать, что это повлечет большую нагрузку, что может привести к падению самого фпс, или медленнее, то тоже на setInterval, однако расход ресурсов будет медленнее. setInterval имеет еще один плюс - скорость анимации можно динамически менять. |
|
|||||
|
Т.е. я так понял, программная твин-анимация - это по сути практически тоже самое что и обычная твин анимация, разница лишь в способе создания? И я так понимаю, что в большинстве случаев программная анимация предпочтительней, если не способствует значительному геморрою у разработчика. Про Fuse что-то не понял. Хелп по крайней мере мне такого слова не выдал.
ЗЫ. Огромное спасибо за практически статью. Я и потомки будут благодарны пока будет жив этот ресурс: многих лет ему существования в здравии и посещаемости ![]()
__________________
Ну все, теперь Забава м-о-я. Гы-гы, а корабль мой! |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
Цитата:
Цитата:
Цитата:
|
![]() |
![]() |
Часовой пояс GMT +4, время: 20:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|