2009-04-11 8 views
3

Ich versuche, die von Flash CS3 bereitgestellte Funktion fl.motion.easing.bounce zu modifizieren, um die resultierende Animation weniger zu bouncen. Ich weiß es zu schätzen, dass "weniger springen" etwas vage ist, aber ich würde jede Hilfe beim Verständnis der Funktion zu schätzen wissen.Wie ändere ich diese Beschleunigungsfunktion, um weniger zu bouncen?

Danke.

/** 
* @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; 
} 

Antwort

1

Grundsätzlich ist die Funktion einen interpolierten Wert für die neue Position zurückkehrt, in Abhängigkeit von 4 Faktoren: aktuelle Zeit der Animation, Anfangswert der animierten Eigenschaft, Gesamtänderung der Animation durchgeführt werden, und die Gesamtdauer der Animation.

Was Sie dort haben, ist eine Überprüfung auf verschiedene Zeiten: Wenn die Animation noch nicht etwa 36% (1/2,75) der Gesamtdauer erreicht hat, wenden Sie die erste Gleichung an; Wenn es zwischen 36% und 72% liegt, wenden Sie die zweite an; usw.

Jede Gleichung ist eine Funktion, die von den ersten Baumargumenten abhängt, also müssen Sie sie im Grunde ein wenig optimieren.

Ich würde vorschlagen, mit dem hartcodierten 7.5625 (machen Sie es größer und niedriger, um die Ergebnisse zu sehen), bis Sie zufrieden sind.


Die 7.5625 ist Math.pow(2.75, 2);, aber hartcodiert auf Verarbeitung zu speichern.

0

Ich weiß, dass Ihnen das keine eindeutige Antwort geben wird, aber diese Gleichungen wurden zuerst von Robert Penner in seinem Buch Programing Macromedia Flash MX entwickelt. Ich weiß, es ist keine leichte Antwort, aber in seinem Buch erklärt er ausführlich, wie diese Funktionen funktionieren. Um wirklich zu verstehen, möchten Sie vielleicht eine Kopie und graben abholen.

0

versuchen, die erste Touch-Down-Zeit zu vergrößern, und reduzieren Sie die Zeit des Bouncing, mache ich erste ganze Strecke von 1,4/2,7, dann 1,4 ~ 2,1, dieser Bereich ist 0.7, halber Bereich ist 0.35.0.35 * 0.35 = 0.1225,1-0.1225 = 0.8775, das sieht gut aus, wenn Sie den Bouncing-Bereich verringern möchten, versuchen Sie, dieses Konzept zu verwenden: Verringern Sie die Reichweite von zwei Zeitpunkten.

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; 
Verwandte Themen