Интерблог

Эмуляция плавности в ActionScript.
Автор: Ognezmej. Опубликовано: 20 Апреля 2011

Предыдущие статьи рассматривали анимацию в двух аспектах - с одной стороны, удобство её создания и редактирования, с другой стороны - устойчивость и работоспособность в руках конечного пользователя. Увы, одно другому обычно противоречит, и чем-то приходится жертвовать.

Тем не менее, выходы и лазейки всегда найдутся. Рассмотрим простенький пример, как можно изобразить подобие плавного ухода элемента в ноль (fade out), не используя кадровую анимацию и не перегружая компьютер большим количеством одновременно выполняемых вычислений. Метод основан на том, что глаз человеческий воспринимает одновременно далеко не так уж много информации. 24 кадра в секунду, чтоб движение казалось плавным - аксиома кинематографа. Чтобы движение казалось хоть каким-то движением, достаточно двух-трёх кадров. Используем вот эту простенькую конструкцию:

my_clip._alpha = 50;
var mPause = setInterval (function ()
                {
                clearInterval (mPause);
                my_clip._alpha = 0;                
                my_function();               
                }, 300);

my_function - функция, которая запускается по окончанию нашей как-бы-анимации.
300 - это 300 миллисекунд, примерно треть секунды. Можете посмотреть, как оно работает с другими значениями.

Запускаем - объект уходит в сумрак быстро, но с некоторой иллюзией плавности - то, что нам и было нужно. Оказалось достаточно одного промежуточного кадра.

Попытаемся подытожить. Для создания сложного интерактивного ролика приходится сочетать разные варианты анимации. При простейших движениях без участия пользователя целесообразнее использовать программную анимацию. Когда возникает необходимость анимации при наведении мыши, используем все возможные методы, чтобы не перегружать машину вычислениями. Если анимация нескольких объектов идентична - оптимальным будет создание одного объекта, внутри которого будет находиться ещё один объект, выполняющий всю необходимую анимацию через tween. Этот самый внутренний объект представляет собой несколько кадров, в каждом из которых изображён один из объектов, которые надо анимировать. Далее внешний объект копируется, при этом внутренний при помощи gotoAndStop() устанавливается на соответствующий кадр. Там, где важна не сколько красота анимации, сколько её наличие, можно использовать эмуляцию через промежуточный кадр. И, разумеется, нейтрализуем быструю мышь посредством onEnterFrame.

 

Метки: ActionScript, Кодинг, Советы

Комментарии

Комментариев пока нет. Стань первым!

Добавить комментарий

Имя
Сообщение
Защита
 
  все поля обязательные для заполнения