2009-02-17 5 views
-1

J'ai ce code AS2 qui fait quelques animations simples quand je roule un mc en utilisant TweenLite. Je sens que j'ai beaucoup de code répétitif.Raccourcir le code de fonction et convertir la variable

Y at-il un moyen d'être en mesure de préciser simplement une fonction comme celui-ci

boxLink (a);

et avoir le reste du code, avec le chemin vers le MovieClip cible dans la fonction au lieu de dans la variable de fonction?

Comment puis-je rendre ce code aussi court que possible?

Est-il possible de convertir une variable: String en une variable: MovieClip? Comment ferais-je cela dans cet exemple?

import gs.*; 
import gs.easing.*; 


function imageAlpha(mc_target:MovieClip) { 
    mc_target.onRollOver = function() { 
      TweenLite.to(mc_target,1,{_alpha:100, ease:Back.easeOut}); 
    }; 

    mc_target.onRollOut = function() { 
      TweenLite.to(mc_target,1,{_alpha:60, ease:Back.easeOut}); 
    }; 
} 



    function boxLink(mc_function:MovieClip, mc_target:MovieClip, mc_image:MovieClip, linkURL:String) { 
    mc_function.onRollOver = function() { 
      TweenLite.to(mc_target,0.5,{_xscale:150, _yscale:150, ease:Back.easeOut}); 
      TweenLite.to(mc_image,1,{_alpha:100, ease:Back.easeOut}); 
    }; 

    mc_function.onRollOut = function() { 
      TweenLite.to(mc_target,0.5,{_xscale:100, _yscale:100, ease:Back.easeOut}); 
      TweenLite.to(mc_image,1,{_alpha:60, ease:Back.easeOut}); 
    }; 

    mc_function.onRelease = function() { 
      if (linkURL) { 
      getURL(linkURL); 
      } 
    }; 
} 



imageAlpha(a_box.image); 
imageAlpha(b_box.image); 
imageAlpha(c_box.image); 
imageAlpha(d_box.image); 

boxLink(a_box.link1,a_box.arrow1,a_box.image,'http://www.google.no'); 
boxLink(a_box.link2,a_box.arrow2,a_box.image,'http://www.google.no'); 
boxLink(a_box.link3,a_box.arrow3,a_box.image,'http://www.google.no'); 

boxLink(b_box.link1,b_box.arrow1,b_box.image,'http://www.google.no'); 
boxLink(b_box.link2,b_box.arrow2,b_box.image,'http://www.google.no'); 
boxLink(b_box.link3,b_box.arrow3,b_box.image,'http://www.google.no'); 

boxLink(c_box.link1,c_box.arrow1,c_box.image,'http://www.google.no'); 
boxLink(c_box.link2,c_box.arrow2,c_box.image,'http://www.google.no'); 
boxLink(c_box.link3,c_box.arrow3,c_box.image); 

boxLink(d_box.link1,d_box.arrow1,d_box.image,'http://www.google.no'); 
boxLink(d_box.link2,d_box.arrow2,d_box.image,'http://www.google.no'); 
boxLink(d_box.link3,d_box.arrow3,d_box.image); 
+1

En vim juste faire 'ggdGzz' qui va résoudre votre problème – Qix

Répondre

2

Utilisez des tableaux au lieu de variables nommées

a_box.link_1, a_box.link_2, ..., a_box.link_3 

devient

a_box.link[ i ] where i = 0 to n-1, n = number of links 

De même pour les flèches.

Ensuite, créez un wrapper pour boxLink()

public function 
boxLinkWrapper(x:BoxType, url:string='http://www.google.no') :ReturnType { 
    for (i:int = 0; i < x.link.size; ++i) { 
     boxLink(x.link[ i ], x.arrow[ i ], x.image, url); 
    } 
} 

En outre, étant donné que vous avez un certain nombre de ces boîtes, les mettre dans un tableau:

var boxes:Array = new Array(); 
boxes.push(new Box("a")); //a_box 
boxes.push(new Box("b")); //b_box 

et terminer les étapes que vous'D besoin pour chaque boîte:

public function 
processBox(x:BoxType):SomeReturnType { 
    imageAlpha(d_box.image); 
    boxLink(a_box.link1,a_box.arrow1,a_box.image,'http://www.google.no'); 
} 

et d'exécuter une boucle for-over sur les boîtes de tableau, ou utilisez le forEac h() fonction membre:

boxes.forEach(processBox); 

Ne pas oublier de remplacer BoxType, SomeReturnType et ReturnType par les types appropriés. Cela aide-t-il? (Note: ceci est le code non testé, mais devrait vous aider à démarrer!)

+0

Merci, quelque chose comme ça, mais je voulais avoir tout le code dans le fonction, donc je pourrais juste insérer boxLink (a); et il ferait tout avec le a (a_box.link1, a_box.arrow1, a_box.image). ? –

+0

C'est ce que fait boxLinkWrapper(). – dirkgently

+0

Ok, j'ai compris;) Mais comment puis-je avoir tout le code dans la "fonction boxLink"? –

Questions connexes