2008-11-21 9 views
2

Avec un code comme celui-ci, il arrive que les contrôles enfant finissent correctement leur animation et qu'ils s'arrêtent parfois à des endroits aléatoires au milieu. Pourquoi ne fonctionnent-ils pas correctement?Pourquoi les tweens s'arrêtent-ils au hasard?

var t:Tween; 
t = new Tween(child1,"x",Elastic.easeOut,0,100,2,true); 
t = new Tween(child1,"y", Elastic.easeOut,0,100,2,true); 
t = new Tween(child2,"x",Strong.easeOut,300,400,1,true); 
t = new Tween(child2,"y", Strong.easeOut,300,400,1,true); 

Répondre

1

Vous pouvez également créer un tableau dans le cadre de votre classe, puis appuyez simplement sur tweens sur ce tableau. Bien que cela puisse empêcher les tweens du tableau de ne jamais être collectés, même après qu'ils aient fini, vous pouvez donc vider le tableau vous-même à des points dans lesquels vous savez que tous les tweens sont terminés.

3

Chaque interpolation doit être affectée à une variable distincte dans la portée globale. Le code suivant se comporte de manière fiable:

var t1:Tween = new Tween(child1,"x",Elastic.easeOut,0,100,2,true); 
var t2:Tween = new Tween(child1,"y", Elastic.easeOut,0,100,2,true); 
var t3:Tween = new Tween(child2,"x",Strong.easeOut,300,400,1,true); 
var t4:Tween = new Tween(child2,"y", Strong.easeOut,300,400,1,true); 

Il semblerait que lorsqu'une variable est réutilisée, l'interpolation qui est pas plus référencé peut obtenir des déchets collectés ou autrement arrêté au milieu de ses travaux.

Le même problème peut se produire si vous utilisez des variables distinctes mais les déclarez dans la portée locale d'une fonction plutôt que dans la portée globale de votre image.

4

En outre, essayez d'utiliser un moteur d'interpolation open/open source plutôt que celui fourni avec Flash. Deux très populaires sont TweenLite et Tweener. Ils offrent de meilleures performances et plus de fonctionnalités/options.

Questions connexes