Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #71, ОКТЯБРЬ 2006 г.

магические движения

MARKO BELICH

Спецвыпуск: Хакер, номер #071, стр. 071-016-5


Обрати внимание на строку 13. В ней находится вызов tween-прототипа, и его результат автоматически применяется к атрибуту movieClip. Значит, если хотим анимировать свойство _x и используем функцию easeOutCirc, сама строка выглядит как:

ЛИСТИНГ

this._x = Math.easeOutCirc(this.vars.t, this.vars.b, this.vars.c, this.vars.d);

Это самый простой tween manager. Остается только его запустить. Быстрый способ — один из tween-прототипов Роберта Пеннера выложить на первый кадр нашего проекта. Делаешь movieClip, называешь его mclip и анимируешь один из его атрибутов.

Скрипт, который вставляем в первый кадр:

ЛИСТИНГ

Math.easeOutCirc = function (t, b, c, d) {

return c * Math.sqrt(1 — (t=t/d-1)*t) + b;

};

MovieClip.prototype.tweenPropertyTo = function(tweenType, property, change, frameDuration) {

var c = this;

c.vars = new Object();

c.vars.t = 0;

c.vars.pr = property;

c.vars.b = c[c.vars.pr];

c.vars.c = change-c.vars.b;

c.vars.d = frameDuration;

c.vars.tT = tweenType;

c.onEnterFrame = function() {

this.vars.t++;

if (this.vars.t<=c.vars.d) {

this[this.vars.pr] = Math[this.vars.tT](this.vars.t, this.vars.b, this.vars.c, this.vars.d);

} else {

delete (this.vars);

delete (this.onEnterFrame);

}

};

};

mclip.tweenPropertyTo("easeOutCirc","_x",350,50);

Последняя линия кода — сущность tween. То, ради чего мы все это делали. Вся история создания и добавления кадров, передвижения клипов и изменения их атрибутов — все это можно поместить в одну строку кода. Если не нравится длина - 50 кадров, - меняешь на 1000. Все очень просто.

Исходник можно найти по адресу: www.shockwaver.net/swf/tween/tweentest.fla.

Но это самая простая версия tween-менеджера, и она не позволяет менять несколько атрибутов одновременно, например _x и _y вместе, чтобы получить движение по диагонали.

Полную же версию можно найти здесь: www.shockwaver.net/swf/tween/tweenfull.fla.

Основной принцип одинаковый. Несколько атрибутов и их значения можно передать функции как массив.

Еще одна возможность — исполнение дополнительной функции по завершению tween:

ЛИСТИНГ

rf = function () {

trace (this);

}

mclip.tweenPropertyTo("easeOutBounce",["_x","_y","_alpha"],[350,55,60],150,rf);

Спустя некоторое время работы со скриптами, ты увидишь, что скриптовая анимация не только не сложна, но и незаменима.

[когда нужен frame tween.]

Есть определенные ситуации при работе с флешем, когда frame motion или shape tween необходимы. К примеру, какое-то очень сложное движение по заранее определенной траектории или покадровая анимация, 3d... В любом случае, анимацию, которая у нас лежит в movieClip, можно контролировать с помощью tween-менеджеров и tween-прототипов.

У каждого movieClip есть атрибуты _currentframe и _totalframes, но их можно только читать. То есть текущий кадр movieClip мы не можем контролировать с помощью этих атрибутов. Для этого используем методы gotoAndStop() и gotoAndPlay(). Поскольку наш tween-менеджер может анимировать только атрибуты, посмотрим, как можно сделать новый атрибут и контролировать его (у AS2 есть более удобный способ для создания новых атрибутов, но мы работаем в AS1).

Назад на стр. 071-016-4  Содержание  Вперед на стр. 071-016-6