2009-03-25 3 views
1

Я использую TweenMax для анимации некоторых стрелок для перемещения, когда я перекатываю ссылку и одушевляюсь назад, когда я выкатываюсь. Но он не работает, он оживляет при опрокидывании, но не разворачивается.Анимация onRollover onRollout с 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); 

Что я делаю неправильно?

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

ответ

2

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

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

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

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

2

Оценка области. Когда срабатывает 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(); 
}; 
}