Интерблог

Программная анимация в ActionScript
Автор: Ognezmej. Опубликовано: 19 Апреля 2011

Спрашивается, нафига во Flash программная анимация, если есть tween и shape, позволяющие легко и непринуждённо производить большинство простейших изменений объекта?

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

Кому-как, а мне рыться в монтажной линейке представляется занятием тоскливым до безнадёжности. Всё должно быть максимально автоматизировано.

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

Для примера возьмём функцию fade, позволяющую плавно менять прозрачность объекта

MovieClip.prototype.fade = function (speed,limit,after)
    {
    var interval = Math.round(1000/speed);
    var grow = (this._alpha<limit);
    var Go = setInterval(function(obj) {
        var stopFade = false;
        if (grow && obj._alpha>=limit) stopFade = true;
        if (!grow && obj._alpha<=limit) stopFade = true;
        if (stopFade)
            {
            clearInterval (Go);
            obj._alpha = limit;
            if (after!=false) after.call();
            }
        else
            {
            if (grow) obj._alpha++;
            else obj._alpha--;
            }
        }, interval, this);   
    }

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

Например,  mc.fade(100,0,function(){trace('анимация завершена');}) - объект уходит в ноль, после чего выдаётся сообщение о завершении анимации.

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

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

 

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

Комментарии

asxyrujvea
31 Августа 2011 в 19:21

kQ36h2 , [url=http://ipounjsxyzfh.com/]ipounjsxyzfh[/url], [link=http://vudinmfldkdg.com/]vudinmfldkdg[/link], http://vcpmbhehpdbl.com/

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

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