магические движения 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). |