国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

TextFx——Ease Function(緩動函數)

2019-11-09 17:32:06
字體:
來源:轉載
供稿:網友

 TextFx——Ease Function(緩動函數)

       

 

 

By D.S.Qiu

尊重他人的勞動,支持原創,轉載請注明出處:http://dsqiu.iteye.com     

 

 

       之前有介紹過UITweener(點擊前往),NGUI用了一個目錄“收集”Tween腳本,集成的功能還是很豐富的,只提供了6種緩動函數(Ease Fuction):Linear,EaseIn,EaSEOut,EaseInOut,BounceIn和BounceOut。當時,對緩動函數就只是一知半解。后面為了做文字特效,就發現了 TextFx 插件,這個插件太贊了,讓我有種感覺一切效果都可以用代碼模擬。TextFx提供了40種緩動函數,表現效果豐富了很多,激動之余,總是想著能不能把這些緩動函數移植到UITweener里面去,所以才有了此文。

      下面就直接貼出Ease Function的實現,方便查看。

 

Method:

       擴容之后的Method的樣式由6種變為41種:

C#代碼  收藏代碼public enum Method  {      Linear,      EaseIn,EaseOut,EaseInOut,BounceIn,BounceOut,      QuadEaseOut, QuadEaseIn, QuadEaseInOut, QuadEaseOutIn,    //新增40種動畫效果      ExpoEaseOut, ExpoEaseIn, ExpoEaseInOut, ExpoEaseOutIn,      CubicEaseOut, CubicEaseIn, CubicEaseInOut, CubicEaseOutIn,      QuartEaseOut, QuartEaseIn, QuartEaseInOut, QuartEaseOutIn,      QuintEaseOut, QuintEaseIn, QuintEaseInOut, QuintEaseOutIn,      CircEaseOut, CircEaseIn, CircEaseInOut, CircEaseOutIn,      SineEaseOut, SineEaseIn, SineEaseInOut, SineEaseOutIn,      ElasticEaseOut, ElasticEaseIn, ElasticEaseInOut, ElasticEaseOutIn,      BounceEaseOut, BounceEaseIn, BounceEaseInOut, BounceEaseOutIn,      BackEaseOut, BackEaseIn, BackEaseInOut, BackEaseOutIn  }  

 

Sample:

C#代碼  收藏代碼      public static float GetEasePRogress(Method ease_type, float linear_progress)    switch (ease_type)  {  case Method.Linear:      return linear_progress;  case Method.BackEaseIn:      return BackEaseIn(linear_progress, 0, 1, 1);        case Method.BackEaseInOut:      return BackEaseInOut(linear_progress, 0, 1, 1);  case Method.BackEaseOut:      return BackEaseOut(linear_progress, 0, 1, 1);  case Method.BackEaseOutIn:      return BackEaseOutIn(linear_progress, 0, 1, 1);  case Method.BounceEaseIn:      return BounceEaseIn(linear_progress, 0, 1, 1);  case Method.BounceEaseInOut:      return BounceEaseInOut(linear_progress, 0, 1, 1);  case Method.BounceEaseOut:      return BounceEaseOut(linear_progress, 0, 1, 1);  case Method.BounceEaseOutIn:      return BounceEaseOutIn(linear_progress, 0, 1, 1);  case Method.CircEaseIn:      return CircEaseIn(linear_progress, 0, 1, 1);  case Method.CircEaseInOut:      return CircEaseInOut(linear_progress, 0, 1, 1);  case Method.CircEaseOut:      return CircEaseOut(linear_progress, 0, 1, 1);  case Method.CircEaseOutIn:      return CircEaseOutIn(linear_progress, 0, 1, 1);  case Method.CubicEaseIn:      return CubicEaseIn(linear_progress, 0, 1, 1);  case Method.CubicEaseInOut:      return CubicEaseInOut(linear_progress, 0, 1, 1);  case Method.CubicEaseOut:      return CubicEaseOut(linear_progress, 0, 1, 1);  case Method.CubicEaseOutIn:      return CubicEaseOutIn(linear_progress, 0, 1, 1);  case Method.ElasticEaseIn:      return ElasticEaseIn(linear_progress, 0, 1, 1);        case Method.ElasticEaseInOut:      return ElasticEaseInOut(linear_progress, 0, 1, 1);  case Method.ElasticEaseOut:      return ElasticEaseOut(linear_progress, 0, 1, 1);  case Method.ElasticEaseOutIn:      return ElasticEaseOutIn(linear_progress, 0, 1, 1);  case Method.ExpoEaseIn:      return ExpoEaseIn(linear_progress, 0, 1, 1);  case Method.ExpoEaseInOut:      return ExpoEaseInOut(linear_progress, 0, 1, 1);  case Method.ExpoEaseOut:      return ExpoEaseOut(linear_progress, 0, 1, 1);  case Method.ExpoEaseOutIn:      return ExpoEaseOutIn(linear_progress, 0, 1, 1);  case Method.QuadEaseIn:      return QuadEaseIn(linear_progress, 0, 1, 1);  case Method.QuadEaseInOut:      return QuadEaseInOut(linear_progress, 0, 1, 1);  case Method.QuadEaseOut:      return QuadEaseOut(linear_progress, 0, 1, 1);  case Method.QuadEaseOutIn:      return QuadEaseOutIn(linear_progress, 0, 1, 1);  case Method.QuartEaseIn:      return QuartEaseIn(linear_progress, 0, 1, 1);  case Method.QuartEaseInOut:      return QuartEaseInOut(linear_progress, 0, 1, 1);  case Method.QuartEaseOut:      return QuartEaseOut(linear_progress, 0, 1, 1);  case Method.QuartEaseOutIn:      return QuartEaseOutIn(linear_progress, 0, 1, 1);  case Method.QuintEaseIn:      return QuintEaseIn(linear_progress, 0, 1, 1);  case Method.QuintEaseInOut:      return QuintEaseInOut(linear_progress, 0, 1, 1);  case Method.QuintEaseOut:      return QuintEaseOut(linear_progress, 0, 1, 1);  case Method.QuintEaseOutIn:      return QuintEaseOutIn(linear_progress, 0, 1, 1);        case Method.SineEaseIn:      return SineEaseIn(linear_progress, 0, 1, 1);  case Method.SineEaseInOut:      return SineEaseInOut(linear_progress, 0, 1, 1);  case Method.SineEaseOut:      return SineEaseOut(linear_progress, 0, 1, 1);  case Method.SineEaseOutIn:      return SineEaseOutIn(linear_progress, 0, 1, 1);        default:      return linear_progress;  }  

 

 Ease Function:

C#代碼  收藏代碼       /* EASING FUNCTIONS */   #region Linear    /// <summary>  /// Easing equation function for a simple linear tweening, with no easing.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float Linear(float t, float b, float c, float d)  {      return c * t / d + b;  }   #endregion   #region Expo    /// <summary>  /// Easing equation function for an exponential (2^t) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ExpoEaseOut(float t, float b, float c, float d)  {      return (t == d) ? b + c : c * (-Mathf.Pow(2, -10 * t / d) + 1) + b;  }    /// <summary>  /// Easing equation function for an exponential (2^t) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ExpoEaseIn(float t, float b, float c, float d)  {      return (t == 0) ? b : c * Mathf.Pow(2, 10 * (t / d - 1)) + b;  }    /// <summary>  /// Easing equation function for an exponential (2^t) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ExpoEaseInOut(float t, float b, float c, float d)  {      if (t == 0)          return b;            if (t == d)          return b + c;            if ((t /= d / 2) < 1)          return c / 2 * Mathf.Pow(2, 10 * (t - 1)) + b;            return c / 2 * (-Mathf.Pow(2, -10 * --t) + 2) + b;  }    /// <summary>  /// Easing equation function for an exponential (2^t) easing out/in:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ExpoEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return ExpoEaseOut(t * 2, b, c / 2, d);            return ExpoEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Circular    /// <summary>  /// Easing equation function for a circular (sqrt(1-t^2)) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CircEaseOut(float t, float b, float c, float d)  {      return c * Mathf.Sqrt(1 - (t = t / d - 1) * t) + b;  }    /// <summary>  /// Easing equation function for a circular (sqrt(1-t^2)) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CircEaseIn(float t, float b, float c, float d)  {      return -c * (Mathf.Sqrt(1 - (t /= d) * t) - 1) + b;  }    /// <summary>  /// Easing equation function for a circular (sqrt(1-t^2)) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CircEaseInOut(float t, float b, float c, float d)  {      if ((t /= d / 2) < 1)          return -c / 2 * (Mathf.Sqrt(1 - t * t) - 1) + b;            return c / 2 * (Mathf.Sqrt(1 - (t -= 2) * t) + 1) + b;  }    /// <summary>  /// Easing equation function for a circular (sqrt(1-t^2)) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CircEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return CircEaseOut(t * 2, b, c / 2, d);            return CircEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Quad    /// <summary>  /// Easing equation function for a quadratic (t^2) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuadEaseOut(float t, float b, float c, float d)  {      return -c * (t /= d) * (t - 2) + b;  }    /// <summary>  /// Easing equation function for a quadratic (t^2) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuadEaseIn(float t, float b, float c, float d)  {      return c * (t /= d) * t + b;  }    /// <summary>  /// Easing equation function for a quadratic (t^2) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuadEaseInOut(float t, float b, float c, float d)  {      if ((t /= d / 2) < 1)          return c / 2 * t * t + b;            return -c / 2 * ((--t) * (t - 2) - 1) + b;  }    /// <summary>  /// Easing equation function for a quadratic (t^2) easing out/in:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuadEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return QuadEaseOut(t * 2, b, c / 2, d);            return QuadEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Sine    /// <summary>  /// Easing equation function for a sinusoidal (sin(t)) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float SineEaseOut(float t, float b, float c, float d)  {      return c * Mathf.Sin(t / d * (Mathf.PI / 2)) + b;  }    /// <summary>  /// Easing equation function for a sinusoidal (sin(t)) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float SineEaseIn(float t, float b, float c, float d)  {      return -c * Mathf.Cos(t / d * (Mathf.PI / 2)) + c + b;  }    /// <summary>  /// Easing equation function for a sinusoidal (sin(t)) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float SineEaseInOut(float t, float b, float c, float d)  {      if ((t /= d / 2) < 1)          return c / 2 * (Mathf.Sin(Mathf.PI * t / 2)) + b;            return -c / 2 * (Mathf.Cos(Mathf.PI * --t / 2) - 2) + b;  }    /// <summary>  /// Easing equation function for a sinusoidal (sin(t)) easing in/out:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float SineEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return SineEaseOut(t * 2, b, c / 2, d);            return SineEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Cubic    /// <summary>  /// Easing equation function for a cubic (t^3) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CubicEaseOut(float t, float b, float c, float d)  {      return c * ((t = t / d - 1) * t * t + 1) + b;  }    /// <summary>  /// Easing equation function for a cubic (t^3) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CubicEaseIn(float t, float b, float c, float d)  {      return c * (t /= d) * t * t + b;  }    /// <summary>  /// Easing equation function for a cubic (t^3) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CubicEaseInOut(float t, float b, float c, float d)  {      if ((t /= d / 2) < 1)          return c / 2 * t * t * t + b;            return c / 2 * ((t -= 2) * t * t + 2) + b;  }    /// <summary>  /// Easing equation function for a cubic (t^3) easing out/in:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float CubicEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return CubicEaseOut(t * 2, b, c / 2, d);            return CubicEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Quartic    /// <summary>  /// Easing equation function for a quartic (t^4) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuartEaseOut(float t, float b, float c, float d)  {      return -c * ((t = t / d - 1) * t * t * t - 1) + b;  }    /// <summary>  /// Easing equation function for a quartic (t^4) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuartEaseIn(float t, float b, float c, float d)  {      return c * (t /= d) * t * t * t + b;  }    /// <summary>  /// Easing equation function for a quartic (t^4) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuartEaseInOut(float t, float b, float c, float d)  {      if ((t /= d / 2) < 1)          return c / 2 * t * t * t * t + b;            return -c / 2 * ((t -= 2) * t * t * t - 2) + b;  }    /// <summary>  /// Easing equation function for a quartic (t^4) easing out/in:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuartEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return QuartEaseOut(t * 2, b, c / 2, d);            return QuartEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Quintic    /// <summary>  /// Easing equation function for a quintic (t^5) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuintEaseOut(float t, float b, float c, float d)  {      return c * ((t = t / d - 1) * t * t * t * t + 1) + b;  }    /// <summary>  /// Easing equation function for a quintic (t^5) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuintEaseIn(float t, float b, float c, float d)  {      return c * (t /= d) * t * t * t * t + b;  }    /// <summary>  /// Easing equation function for a quintic (t^5) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuintEaseInOut(float t, float b, float c, float d)  {      if ((t /= d / 2) < 1)          return c / 2 * t * t * t * t * t + b;      return c / 2 * ((t -= 2) * t * t * t * t + 2) + b;  }    /// <summary>  /// Easing equation function for a quintic (t^5) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float QuintEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return QuintEaseOut(t * 2, b, c / 2, d);      return QuintEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Elastic    /// <summary>  /// Easing equation function for an elastic (exponentially decaying sine wave) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ElasticEaseOut(float t, float b, float c, float d)  {      if ((t /= d) == 1)          return b + c;            float p = d * 0.3f;      float s = p / 4;            return (c * Mathf.Pow(2, -10 * t) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p) + c + b);  }    /// <summary>  /// Easing equation function for an elastic (exponentially decaying sine wave) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ElasticEaseIn(float t, float b, float c, float d)  {      if ((t /= d) == 1)          return b + c;            float p = d * 0.3f;      float s = p / 4;            return -(c * Mathf.Pow(2, 10 * (t -= 1)) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p)) + b;  }    /// <summary>  /// Easing equation function for an elastic (exponentially decaying sine wave) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ElasticEaseInOut(float t, float b, float c, float d)  {      if ((t /= d / 2f) == 2)          return b + c;            float p = d * (0.3f * 1.5f);      float s = p / 4;            if (t < 1)          return -0.5f * (c * Mathf.Pow(2, 10 * (t -= 1)) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p)) + b;      return c * Mathf.Pow(2, -10 * (t -= 1)) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p) * 0.5f + c + b;  }    /// <summary>  /// Easing equation function for an elastic (exponentially decaying sine wave) easing out/in:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float ElasticEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return ElasticEaseOut(t * 2, b, c / 2, d);      return ElasticEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Bounce    /// <summary>  /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BounceEaseOut(float t, float b, float c, float d)  {      if ((t /= d) < (1 / 2.75f))          return c * (7.5625f * t * t) + b;      else if (t < (2 / 2.75f))          return c * (7.5625f * (t -= (1.5f / 2.75f)) * t + 0.75f) + b;      else if (t < (2.5f / 2.75f))          return c * (7.5625f * (t -= (2.25f / 2.75f)) * t + 0.9375f) + b;      else          return c * (7.5625f * (t -= (2.625f / 2.75f)) * t + .984375f) + b;  }    /// <summary>  /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BounceEaseIn(float t, float b, float c, float d)  {      return c - BounceEaseOut(d - t, 0, c, d) + b;  }    /// <summary>  /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BounceEaseInOut(float t, float b, float c, float d)  {      if (t < d / 2)          return BounceEaseIn(t * 2, 0, c, d) * 0.5f + b;      else          return BounceEaseOut(t * 2 - d, 0, c, d) * 0.5f + c * 0.5f + b;  }    /// <summary>  /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out/in:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BounceEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return BounceEaseOut(t * 2, b, c / 2, d);      return BounceEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion   #region Back    /// <summary>  /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out:   /// decelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BackEaseOut(float t, float b, float c, float d)  {      return c * ((t = t / d - 1) * t * ((1.70158f + 1) * t + 1.70158f) + 1) + b;  }    /// <summary>  /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in:   /// accelerating from zero velocity.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BackEaseIn(float t, float b, float c, float d)  {      return c * (t /= d) * t * ((1.70158f + 1) * t - 1.70158f) + b;  }    /// <summary>  /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in/out:   /// acceleration until halfway, then deceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BackEaseInOut(float t, float b, float c, float d)  {      float s = 1.70158f;      if ((t /= d / 2) < 1)          return c / 2 * (t * t * (((s *= (1.525f)) + 1) * t - s)) + b;      return c / 2 * ((t -= 2) * t * (((s *= (1.525f)) + 1) * t + s) + 2) + b;  }    /// <summary>  /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in:   /// deceleration until halfway, then acceleration.  /// </summary>  /// <param name="t">Current time in seconds.</param>  /// <param name="b">Starting value.</param>  /// <param name="c">Final value.</param>  /// <param name="d">Duration of animation.</param>  /// <returns>The correct value.</returns>  public static float BackEaseOutIn(float t, float b, float c, float d)  {      if (t < d / 2)          return BackEaseOut(t * 2, b, c / 2, d);      return BackEaseIn((t * 2) - d, b + c / 2, c / 2, d);  }   #endregion  

 

小結:

       首先,非常感謝TextFx的作者,然后 TextFx 的插件真的很棒,實用又簡單,而不會華而不實。在UITweener的文章中也對緩動函數有介紹,貼出其中30種的軌跡圖,會更加直觀。此文是為了大家能夠檢索到需要的內容。

       在UITweener的文末附上了30中緩動曲線的圖形,感覺有點不夠動態,參考①中給出的效果會更好些,更容易理解和體會?!?/p>

                                                                                                                                                                            增補于 2014,1,14  9:25

 

 

如果您對D.S.Qiu有任何建議或意見可以在文章后面評論,或者發郵件(gd.s.qiu@Gmail.com)交流,您的鼓勵和支持是我前進的動力,希望能有更多更好的分享。

        轉載請在文首注明出處:http://dsqiu.iteye.com/blog/2001007

更多精彩請關注D.S.Qiu的博客和微博(ID:靜水逐風)

 

 參考:

①robertpenner.com: http://www.robertpenner.com/easing/easing_demo.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁武县| 沙田区| 崇明县| 横峰县| 仁怀市| 宁远县| 泸定县| 钟祥市| 淅川县| 伊金霍洛旗| 宿松县| 英超| 萍乡市| 会同县| 武隆县| 波密县| 昔阳县| 泉州市| 新丰县| 安福县| 榆树市| 阜城县| 正镶白旗| 黑河市| 日土县| 青铜峡市| 永修县| 福贡县| 耒阳市| 依兰县| 城口县| 吴桥县| 水富县| 合肥市| 宜川县| 辽中县| 西宁市| 洛隆县| 中牟县| 南康市| 曲麻莱县|