Анимация при переворачивании при развертывании с помощью TweenMax

Я использую 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);

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

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


person Community    schedule 25.03.2009    source источник


Ответы (3)


Люк абсолютно прав, вы создали «ЛОКАЛЬНУЮ ПЕРЕМЕННУЮ», используя ключевое слово «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();
};
person Community    schedule 27.03.2009

Обзор. Когда 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();
};
}
person Community    schedule 26.03.2009

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

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

person Community    schedule 25.03.2009