Анимировать onRollover onRollout с TweenMax - PullRequest
1 голос
/ 25 марта 2009

Я использую TweenMax, чтобы анимировать некоторые стрелки для перемещения, когда я переворачиваю ссылку, и анимацию назад, когда я выкатываюсь. Но он не работает, он оживляет при опрокидывании, но не выкатывает.

function boxLink(mc_function:MovieClip, mc_target:MovieClip) {
mc_function.onRollOver = function() {
    var myTween:TweenMax = new TweenMax(mc_target,0.5,{_x:"2", _alpha:50, ease:Back.easeOut});
};
mc_function.onRollOut = function() {
    myTween.reverse();
};
}

boxLink(link_a1,arrow_a1);

Что я делаю не так?

Есть ли лучший способ написать этот код?

Ответы [ 3 ]

2 голосов
/ 27 марта 2009

Scoping. При запуске onRollOut переменная myTween не существует, поскольку она объявлена ​​в onRollOver и поэтому будет существовать только в области действия onRollOver. Вместо этого создайте переменную myTween в области действия функции mc_function, чтобы она была доступна как в onRollOver, так и в onRollOut.

function boxLink(mc_function:MovieClip, mc_target:MovieClip) {
mc_function.onRollOver = function() {
        this.myTween = new TweenMax(mc_target,0.5,{_x:"2", _alpha:50, ease:Back.easeOut});
};
mc_function.onRollOut = function() {
        this.myTween.reverse();
};
}
2 голосов
/ 28 марта 2009

Люк абсолютно прав, вы создали «LOCAL VARIABLE», используя ключевое слово «var», и его область действия - это та функция, из которой он создан; После запуска этой функции она больше не доступна. В чем я отличаюсь от Люка, так это то, что я создал бы вашу переменную наверху (компилятор все равно перемещает переменные наверх), вы создаете ее в области видимости класса, если вы разрабатываете ООП, в противном случае прикрепите ее к верхней части фрейма действий вне какой-либо функции. Вам не нужно указывать это значение, просто объявите его и введите его.

var myTween:TweenMax; //Can be access from anywhere within "this" scope.
mc_function.onRollOver = function()
{
    myTween = new TweenMax(mc_target,0.5,{_x:"2", _alpha:50,  ease:Back.easeOut});
};
mc_function.onRollOut = function()
{
    myTween.reverse();
};
1 голос
/ 25 марта 2009

Вы уверены, что при выполнении onRollOut переменная myTween все еще существует? Поскольку переменная, определенная с помощью var в функции, теоретически должна жить только внутри функции, которая ее определила. Поэтому я предполагаю, что вы вызываете переменную, которая больше не существует.

Попробуйте ввести trace(myTween); непосредственно перед myTween.reverse();. Если он печатает undefined, то это ваша проблема, и вы должны заменить myTween.reverse(); с опозитным переходом, но написанным как var myTween:TweenMax = new TweenMax(*);

...