2009-04-11 6 views
3

J'essaie de modifier la fonction fl.motion.easing.bounce fournie par Flash CS3 pour réduire l'animation qui en résulte. J'apprécie que «rebondir moins» soit un peu vague, mais j'apprécierais n'importe quelle aide dans la compréhension de la fonction.Comment modifier cette fonction d'accélération pour qu'elle rebondisse moins?

Merci.

/** 
* @param t Specifies the current time, between 0 and duration inclusive. 
* 
* @param b Specifies the initial value of the animation property. 
* 
* @param c Specifies the total change in the animation property. 
* 
* @param d Specifies the duration of the motion. 
* 
* @return The value of the interpolated property at the specified time.  
*/ 
public static function easeOut(t:Number, b:Number, 
           c:Number, d:Number):Number 
{ 
    if ((t /= d) < (1/2.75)) 
     return c * (7.5625 * t * t) + b; 

    else if (t < (2/2.75)) 
     return c * (7.5625 * (t -= (1.5/2.75)) * t + 0.75) + b; 

    else if (t < (2.5/2.75)) 
     return c * (7.5625 * (t -= (2.25/2.75)) * t + 0.9375) + b; 

    else 
     return c * (7.5625 * (t -= (2.625/2.75)) * t + 0.984375) + b; 
} 

Répondre

1

Fondamentalement, la fonction retourne la valeur interpolée de la nouvelle position en fonction de 4 facteurs: l'heure de l'animation, la valeur initiale de la propriété en cours d'animation, la variation totale de l'animation à faire, et la durée totale de l'animation. Ce que vous avez là-bas est une vérification des différentes durées: si l'animation n'atteignait toujours pas environ 36% (1/2,75) de la durée totale, appliquez la première équation; si elle est comprise entre 36% et 72%, appliquez la seconde;

Chaque équation est une fonction dépendant des premiers arguments de l'arborescence, vous devez donc les modifier un peu.

Je vous suggère de jouer avec ce 7.5625 codé en dur (faites-le plus grand et plus bas pour voir les résultats) jusqu'à ce que vous soyez satisfait.


Le 7.5625 est Math.pow(2.75, 2);, mais codées en dur pour économiser sur le traitement.

0

Je sais que cela ne va pas vous donner une réponse claire non plus, mais ces équations ont d'abord été conçues par Robert Penner dans son livre Programing Macromedia Flash MX. Je sais que ce n'est pas une réponse facile, mais dans son livre, il explique en détail comment ces fonctions fonctionnent. Essayer de prendre une copie et de creuser po

0

essayer d'agrandir le premier temps de toucher, et réduire le temps de rebondissement, je fais d'abord toute la distance de 1.4/2.7, puis 1.4 ~ 2.1, cette gamme est de 0,7, la demi gamme est 0,35,0,35 * 0,35 = 0,1225,1-0,1225 = 0,8775, cela semble bon, si vous voulez réduire la portée de rebondissement, essayez d'utiliser ce concept: diminuer la plage de deux points de temps.

t /= d; 
    if (t < 1.4/2.75) { 
     return 3.858419 * t * t; 
    } 
    else if (t < 2.1/2.75) { 
     t -= 1.75f/2.75; 
     return 7.5625 * t * t + 0.8775f; 
    } 
    else if (t < 2.5/2.75) { 
     t -= 2.3f/2.75; 
     return 7.5625 * t * t + 0.96f; 
    } 
    t -= 2.625f/2.75; 
    return 7.5625 * t * t + 0.984375f;