Интерблог

Программная анимация в 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, Кодинг, Советы

Популярные записи

Принцип неопределённости в РНР

Принцип неопределённости в MYSQL

Недолёт

А ещё AJAX нужен для...

Принцип неопределённости в PHP - праздник продолжается!

Эмуляция плавности в ActionScript.

Программная анимация в ActionScript

Анимация при наведении в ActionScript

Использование кодировки UTF-8

Буквицца

Архив записей  

2019

Янв  Фев  Мар  Апр  Май  Июн

2018

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2017

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2016

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2015

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2014

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2013

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2012

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2011

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2010

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек

2009

Янв  Фев  Мар  Апр  Май  Июн

Июл  Авг  Сен  Окт  Ноя  Дек