2009-03-25 13 views
1

J'utilise TweenMax pour animer des flèches à déplacer lorsque je survole un lien, et l'animation revient lorsque je déploie. Mais ça ne marche pas, ça s'anime au survol, mais pas au déploiement.Animer onRollover onRollout avec 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); 

Qu'est-ce que je fais mal?

Existe-t-il un meilleur moyen d'écrire ce code?

Répondre

2

Luc est tout à fait correct, vous avez créé une « variable locale » en utilisant le mot-clé « var » et il est la portée est celle de la fonction, il est créé à l'intérieur de; Une fois cette fonction exécutée, elle n'est plus disponible. Où je diffère de Luke est que je créerais votre variable en haut (Le compilateur déplace de toute façon les variables), vous le créez dans la portée de la classe, si vous développez la POO, sinon le coller près du haut de votre cadre d'actions, en dehors de toute fonction. Il n'est pas nécessaire de lui donner une valeur, il suffit de le déclarer et de le saisir.

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

Etes-vous sûr que lorsque onRollOut est exécuté, la variable myTween existe toujours? Parce qu'une variable définie avec var dans une fonction devrait, théoriquement, ne vivre que dans la fonction qui l'a définie. Donc, je suppose que vous appelez une variable qui n'existe plus. Essayez de placer un trace(myTween); juste avant myTween.reverse();. Si elle imprime undefined, alors c'est votre problème et vous devez remplacer myTween.reverse(); avec la transition oposite, mais écrit comme var myTween:TweenMax = new TweenMax(*);

2

Scoping. Lorsque l'onRollOut est déclenché, la variable myTween n'existe pas car elle est déclarée dans onRollOver et n'existera donc que dans la portée onRollOver. Créez plutôt la variable myTween dans la portée de la fonction mc_function afin qu'elle soit disponible dans onRollOver et 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(); 
}; 
}