TextFx-Ease Function(缓动函数)

来源:互联网 发布:js继承题目 编辑:程序博客网 时间:2024/06/09 17:10

尊重他人的劳动,支持原创,转载请注明出处: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#代码 复制代码 收藏代码
  1. public enum Method 
  2.     Linear, 
  3.     EaseIn,EaseOut,EaseInOut,BounceIn,BounceOut, 
  4.     QuadEaseOut, QuadEaseIn, QuadEaseInOut, QuadEaseOutIn,    //新增40种动画效果 
  5.     ExpoEaseOut, ExpoEaseIn, ExpoEaseInOut, ExpoEaseOutIn, 
  6.     CubicEaseOut, CubicEaseIn, CubicEaseInOut, CubicEaseOutIn, 
  7.     QuartEaseOut, QuartEaseIn, QuartEaseInOut, QuartEaseOutIn, 
  8.     QuintEaseOut, QuintEaseIn, QuintEaseInOut, QuintEaseOutIn, 
  9.     CircEaseOut, CircEaseIn, CircEaseInOut, CircEaseOutIn, 
  10.     SineEaseOut, SineEaseIn, SineEaseInOut, SineEaseOutIn, 
  11.     ElasticEaseOut, ElasticEaseIn, ElasticEaseInOut, ElasticEaseOutIn, 
  12.     BounceEaseOut, BounceEaseIn, BounceEaseInOut, BounceEaseOutIn, 
  13.     BackEaseOut, BackEaseIn, BackEaseInOut, BackEaseOutIn 

Sample:

C#代码 复制代码 收藏代码
  1.       public staticfloat GetEaseProgress(Method ease_type,float linear_progress) 
  2.  
  3. switch (ease_type) 
  4. case Method.Linear: 
  5.     return linear_progress; 
  6. case Method.BackEaseIn: 
  7.     return BackEaseIn(linear_progress, 0, 1, 1); 
  8.      
  9. case Method.BackEaseInOut: 
  10.     return BackEaseInOut(linear_progress, 0, 1, 1); 
  11. case Method.BackEaseOut: 
  12.     return BackEaseOut(linear_progress, 0, 1, 1); 
  13. case Method.BackEaseOutIn: 
  14.     return BackEaseOutIn(linear_progress, 0, 1, 1); 
  15. case Method.BounceEaseIn: 
  16.     return BounceEaseIn(linear_progress, 0, 1, 1); 
  17. case Method.BounceEaseInOut: 
  18.     return BounceEaseInOut(linear_progress, 0, 1, 1); 
  19. case Method.BounceEaseOut: 
  20.     return BounceEaseOut(linear_progress, 0, 1, 1); 
  21. case Method.BounceEaseOutIn: 
  22.     return BounceEaseOutIn(linear_progress, 0, 1, 1); 
  23. case Method.CircEaseIn: 
  24.     return CircEaseIn(linear_progress, 0, 1, 1); 
  25. case Method.CircEaseInOut: 
  26.     return CircEaseInOut(linear_progress, 0, 1, 1); 
  27. case Method.CircEaseOut: 
  28.     return CircEaseOut(linear_progress, 0, 1, 1); 
  29. case Method.CircEaseOutIn: 
  30.     return CircEaseOutIn(linear_progress, 0, 1, 1); 
  31. case Method.CubicEaseIn: 
  32.     return CubicEaseIn(linear_progress, 0, 1, 1); 
  33. case Method.CubicEaseInOut: 
  34.     return CubicEaseInOut(linear_progress, 0, 1, 1); 
  35. case Method.CubicEaseOut: 
  36.     return CubicEaseOut(linear_progress, 0, 1, 1); 
  37. case Method.CubicEaseOutIn: 
  38.     return CubicEaseOutIn(linear_progress, 0, 1, 1); 
  39. case Method.ElasticEaseIn: 
  40.     return ElasticEaseIn(linear_progress, 0, 1, 1); 
  41.      
  42. case Method.ElasticEaseInOut: 
  43.     return ElasticEaseInOut(linear_progress, 0, 1, 1); 
  44. case Method.ElasticEaseOut: 
  45.     return ElasticEaseOut(linear_progress, 0, 1, 1); 
  46. case Method.ElasticEaseOutIn: 
  47.     return ElasticEaseOutIn(linear_progress, 0, 1, 1); 
  48. case Method.ExpoEaseIn: 
  49.     return ExpoEaseIn(linear_progress, 0, 1, 1); 
  50. case Method.ExpoEaseInOut: 
  51.     return ExpoEaseInOut(linear_progress, 0, 1, 1); 
  52. case Method.ExpoEaseOut: 
  53.     return ExpoEaseOut(linear_progress, 0, 1, 1); 
  54. case Method.ExpoEaseOutIn: 
  55.     return ExpoEaseOutIn(linear_progress, 0, 1, 1); 
  56. case Method.QuadEaseIn: 
  57.     return QuadEaseIn(linear_progress, 0, 1, 1); 
  58. case Method.QuadEaseInOut: 
  59.     return QuadEaseInOut(linear_progress, 0, 1, 1); 
  60. case Method.QuadEaseOut: 
  61.     return QuadEaseOut(linear_progress, 0, 1, 1); 
  62. case Method.QuadEaseOutIn: 
  63.     return QuadEaseOutIn(linear_progress, 0, 1, 1); 
  64. case Method.QuartEaseIn: 
  65.     return QuartEaseIn(linear_progress, 0, 1, 1); 
  66. case Method.QuartEaseInOut: 
  67.     return QuartEaseInOut(linear_progress, 0, 1, 1); 
  68. case Method.QuartEaseOut: 
  69.     return QuartEaseOut(linear_progress, 0, 1, 1); 
  70. case Method.QuartEaseOutIn: 
  71.     return QuartEaseOutIn(linear_progress, 0, 1, 1); 
  72. case Method.QuintEaseIn: 
  73.     return QuintEaseIn(linear_progress, 0, 1, 1); 
  74. case Method.QuintEaseInOut: 
  75.     return QuintEaseInOut(linear_progress, 0, 1, 1); 
  76. case Method.QuintEaseOut: 
  77.     return QuintEaseOut(linear_progress, 0, 1, 1); 
  78. case Method.QuintEaseOutIn: 
  79.     return QuintEaseOutIn(linear_progress, 0, 1, 1); 
  80.      
  81. case Method.SineEaseIn: 
  82.     return SineEaseIn(linear_progress, 0, 1, 1); 
  83. case Method.SineEaseInOut: 
  84.     return SineEaseInOut(linear_progress, 0, 1, 1); 
  85. case Method.SineEaseOut: 
  86.     return SineEaseOut(linear_progress, 0, 1, 1); 
  87. case Method.SineEaseOutIn: 
  88.     return SineEaseOutIn(linear_progress, 0, 1, 1); 
  89.      
  90. default
  91.     return linear_progress; 

Ease Function:

C#代码 复制代码 收藏代码
  1.        /* EASING FUNCTIONS */ 
  2. #region Linear 
  3.  
  4. /// <summary> 
  5. /// Easing equation function for a simple linear tweening, with no easing. 
  6. /// </summary> 
  7. /// <param name="t">Current time in seconds.</param> 
  8. /// <param name="b">Starting value.</param> 
  9. /// <param name="c">Final value.</param> 
  10. /// <param name="d">Duration of animation.</param> 
  11. /// <returns>The correct value.</returns> 
  12. public staticfloat Linear(float t,float b, float c,float d) 
  13.     return c * t / d + b; 
  14. #endregion 
  15. #region Expo 
  16.  
  17. /// <summary> 
  18. /// Easing equation function for an exponential (2^t) easing out: 
  19. /// decelerating from zero velocity. 
  20. /// </summary> 
  21. /// <param name="t">Current time in seconds.</param> 
  22. /// <param name="b">Starting value.</param> 
  23. /// <param name="c">Final value.</param> 
  24. /// <param name="d">Duration of animation.</param> 
  25. /// <returns>The correct value.</returns> 
  26. public staticfloat ExpoEaseOut(float t,float b, float c,float d) 
  27.     return (t == d) ? b + c : c * (-Mathf.Pow(2, -10 * t / d) + 1) + b; 
  28.  
  29. /// <summary> 
  30. /// Easing equation function for an exponential (2^t) easing in: 
  31. /// accelerating from zero velocity. 
  32. /// </summary> 
  33. /// <param name="t">Current time in seconds.</param> 
  34. /// <param name="b">Starting value.</param> 
  35. /// <param name="c">Final value.</param> 
  36. /// <param name="d">Duration of animation.</param> 
  37. /// <returns>The correct value.</returns> 
  38. public staticfloat ExpoEaseIn(float t,float b, float c,float d) 
  39.     return (t == 0) ? b : c * Mathf.Pow(2, 10 * (t / d - 1)) + b; 
  40.  
  41. /// <summary> 
  42. /// Easing equation function for an exponential (2^t) easing in/out: 
  43. /// acceleration until halfway, then deceleration. 
  44. /// </summary> 
  45. /// <param name="t">Current time in seconds.</param> 
  46. /// <param name="b">Starting value.</param> 
  47. /// <param name="c">Final value.</param> 
  48. /// <param name="d">Duration of animation.</param> 
  49. /// <returns>The correct value.</returns> 
  50. public staticfloat ExpoEaseInOut(float t,float b, float c,float d) 
  51.     if (t == 0) 
  52.         return b; 
  53.      
  54.     if (t == d) 
  55.         return b + c; 
  56.      
  57.     if ((t /= d / 2) < 1) 
  58.         return c / 2 * Mathf.Pow(2, 10 * (t - 1)) + b; 
  59.      
  60.     return c / 2 * (-Mathf.Pow(2, -10 * --t) + 2) + b; 
  61.  
  62. /// <summary> 
  63. /// Easing equation function for an exponential (2^t) easing out/in: 
  64. /// deceleration until halfway, then acceleration. 
  65. /// </summary> 
  66. /// <param name="t">Current time in seconds.</param> 
  67. /// <param name="b">Starting value.</param> 
  68. /// <param name="c">Final value.</param> 
  69. /// <param name="d">Duration of animation.</param> 
  70. /// <returns>The correct value.</returns> 
  71. public staticfloat ExpoEaseOutIn(float t,float b, float c,float d) 
  72.     if (t < d / 2) 
  73.         return ExpoEaseOut(t * 2, b, c / 2, d); 
  74.      
  75.     return ExpoEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  76. #endregion 
  77. #region Circular 
  78.  
  79. /// <summary> 
  80. /// Easing equation function for a circular (sqrt(1-t^2)) easing out: 
  81. /// decelerating from zero velocity. 
  82. /// </summary> 
  83. /// <param name="t">Current time in seconds.</param> 
  84. /// <param name="b">Starting value.</param> 
  85. /// <param name="c">Final value.</param> 
  86. /// <param name="d">Duration of animation.</param> 
  87. /// <returns>The correct value.</returns> 
  88. public staticfloat CircEaseOut(float t,float b, float c,float d) 
  89.     return c * Mathf.Sqrt(1 - (t = t / d - 1) * t) + b; 
  90.  
  91. /// <summary> 
  92. /// Easing equation function for a circular (sqrt(1-t^2)) easing in: 
  93. /// accelerating from zero velocity. 
  94. /// </summary> 
  95. /// <param name="t">Current time in seconds.</param> 
  96. /// <param name="b">Starting value.</param> 
  97. /// <param name="c">Final value.</param> 
  98. /// <param name="d">Duration of animation.</param> 
  99. /// <returns>The correct value.</returns> 
  100. public staticfloat CircEaseIn(float t,float b, float c,float d) 
  101.     return -c * (Mathf.Sqrt(1 - (t /= d) * t) - 1) + b; 
  102.  
  103. /// <summary> 
  104. /// Easing equation function for a circular (sqrt(1-t^2)) easing in/out: 
  105. /// acceleration until halfway, then deceleration. 
  106. /// </summary> 
  107. /// <param name="t">Current time in seconds.</param> 
  108. /// <param name="b">Starting value.</param> 
  109. /// <param name="c">Final value.</param> 
  110. /// <param name="d">Duration of animation.</param> 
  111. /// <returns>The correct value.</returns> 
  112. public staticfloat CircEaseInOut(float t,float b, float c,float d) 
  113.     if ((t /= d / 2) < 1) 
  114.         return -c / 2 * (Mathf.Sqrt(1 - t * t) - 1) + b; 
  115.      
  116.     return c / 2 * (Mathf.Sqrt(1 - (t -= 2) * t) + 1) + b; 
  117.  
  118. /// <summary> 
  119. /// Easing equation function for a circular (sqrt(1-t^2)) easing in/out: 
  120. /// acceleration until halfway, then deceleration. 
  121. /// </summary> 
  122. /// <param name="t">Current time in seconds.</param> 
  123. /// <param name="b">Starting value.</param> 
  124. /// <param name="c">Final value.</param> 
  125. /// <param name="d">Duration of animation.</param> 
  126. /// <returns>The correct value.</returns> 
  127. public staticfloat CircEaseOutIn(float t,float b, float c,float d) 
  128.     if (t < d / 2) 
  129.         return CircEaseOut(t * 2, b, c / 2, d); 
  130.      
  131.     return CircEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  132. #endregion 
  133. #region Quad 
  134.  
  135. /// <summary> 
  136. /// Easing equation function for a quadratic (t^2) easing out: 
  137. /// decelerating from zero velocity. 
  138. /// </summary> 
  139. /// <param name="t">Current time in seconds.</param> 
  140. /// <param name="b">Starting value.</param> 
  141. /// <param name="c">Final value.</param> 
  142. /// <param name="d">Duration of animation.</param> 
  143. /// <returns>The correct value.</returns> 
  144. public staticfloat QuadEaseOut(float t,float b, float c,float d) 
  145.     return -c * (t /= d) * (t - 2) + b; 
  146.  
  147. /// <summary> 
  148. /// Easing equation function for a quadratic (t^2) easing in: 
  149. /// accelerating from zero velocity. 
  150. /// </summary> 
  151. /// <param name="t">Current time in seconds.</param> 
  152. /// <param name="b">Starting value.</param> 
  153. /// <param name="c">Final value.</param> 
  154. /// <param name="d">Duration of animation.</param> 
  155. /// <returns>The correct value.</returns> 
  156. public staticfloat QuadEaseIn(float t,float b, float c,float d) 
  157.     return c * (t /= d) * t + b; 
  158.  
  159. /// <summary> 
  160. /// Easing equation function for a quadratic (t^2) easing in/out: 
  161. /// acceleration until halfway, then deceleration. 
  162. /// </summary> 
  163. /// <param name="t">Current time in seconds.</param> 
  164. /// <param name="b">Starting value.</param> 
  165. /// <param name="c">Final value.</param> 
  166. /// <param name="d">Duration of animation.</param> 
  167. /// <returns>The correct value.</returns> 
  168. public staticfloat QuadEaseInOut(float t,float b, float c,float d) 
  169.     if ((t /= d / 2) < 1) 
  170.         return c / 2 * t * t + b; 
  171.      
  172.     return -c / 2 * ((--t) * (t - 2) - 1) + b; 
  173.  
  174. /// <summary> 
  175. /// Easing equation function for a quadratic (t^2) easing out/in: 
  176. /// deceleration until halfway, then acceleration. 
  177. /// </summary> 
  178. /// <param name="t">Current time in seconds.</param> 
  179. /// <param name="b">Starting value.</param> 
  180. /// <param name="c">Final value.</param> 
  181. /// <param name="d">Duration of animation.</param> 
  182. /// <returns>The correct value.</returns> 
  183. public staticfloat QuadEaseOutIn(float t,float b, float c,float d) 
  184.     if (t < d / 2) 
  185.         return QuadEaseOut(t * 2, b, c / 2, d); 
  186.      
  187.     return QuadEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  188. #endregion 
  189. #region Sine 
  190.  
  191. /// <summary> 
  192. /// Easing equation function for a sinusoidal (sin(t)) easing out: 
  193. /// decelerating from zero velocity. 
  194. /// </summary> 
  195. /// <param name="t">Current time in seconds.</param> 
  196. /// <param name="b">Starting value.</param> 
  197. /// <param name="c">Final value.</param> 
  198. /// <param name="d">Duration of animation.</param> 
  199. /// <returns>The correct value.</returns> 
  200. public staticfloat SineEaseOut(float t,float b, float c,float d) 
  201.     return c * Mathf.Sin(t / d * (Mathf.PI / 2)) + b; 
  202.  
  203. /// <summary> 
  204. /// Easing equation function for a sinusoidal (sin(t)) easing in: 
  205. /// accelerating from zero velocity. 
  206. /// </summary> 
  207. /// <param name="t">Current time in seconds.</param> 
  208. /// <param name="b">Starting value.</param> 
  209. /// <param name="c">Final value.</param> 
  210. /// <param name="d">Duration of animation.</param> 
  211. /// <returns>The correct value.</returns> 
  212. public staticfloat SineEaseIn(float t,float b, float c,float d) 
  213.     return -c * Mathf.Cos(t / d * (Mathf.PI / 2)) + c + b; 
  214.  
  215. /// <summary> 
  216. /// Easing equation function for a sinusoidal (sin(t)) easing in/out: 
  217. /// acceleration until halfway, then deceleration. 
  218. /// </summary> 
  219. /// <param name="t">Current time in seconds.</param> 
  220. /// <param name="b">Starting value.</param> 
  221. /// <param name="c">Final value.</param> 
  222. /// <param name="d">Duration of animation.</param> 
  223. /// <returns>The correct value.</returns> 
  224. public staticfloat SineEaseInOut(float t,float b, float c,float d) 
  225.     if ((t /= d / 2) < 1) 
  226.         return c / 2 * (Mathf.Sin(Mathf.PI * t / 2)) + b; 
  227.      
  228.     return -c / 2 * (Mathf.Cos(Mathf.PI * --t / 2) - 2) + b; 
  229.  
  230. /// <summary> 
  231. /// Easing equation function for a sinusoidal (sin(t)) easing in/out: 
  232. /// deceleration until halfway, then acceleration. 
  233. /// </summary> 
  234. /// <param name="t">Current time in seconds.</param> 
  235. /// <param name="b">Starting value.</param> 
  236. /// <param name="c">Final value.</param> 
  237. /// <param name="d">Duration of animation.</param> 
  238. /// <returns>The correct value.</returns> 
  239. public staticfloat SineEaseOutIn(float t,float b, float c,float d) 
  240.     if (t < d / 2) 
  241.         return SineEaseOut(t * 2, b, c / 2, d); 
  242.      
  243.     return SineEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  244. #endregion 
  245. #region Cubic 
  246.  
  247. /// <summary> 
  248. /// Easing equation function for a cubic (t^3) easing out: 
  249. /// decelerating from zero velocity. 
  250. /// </summary> 
  251. /// <param name="t">Current time in seconds.</param> 
  252. /// <param name="b">Starting value.</param> 
  253. /// <param name="c">Final value.</param> 
  254. /// <param name="d">Duration of animation.</param> 
  255. /// <returns>The correct value.</returns> 
  256. public staticfloat CubicEaseOut(float t,float b, float c,float d) 
  257.     return c * ((t = t / d - 1) * t * t + 1) + b; 
  258.  
  259. /// <summary> 
  260. /// Easing equation function for a cubic (t^3) easing in: 
  261. /// accelerating from zero velocity. 
  262. /// </summary> 
  263. /// <param name="t">Current time in seconds.</param> 
  264. /// <param name="b">Starting value.</param> 
  265. /// <param name="c">Final value.</param> 
  266. /// <param name="d">Duration of animation.</param> 
  267. /// <returns>The correct value.</returns> 
  268. public staticfloat CubicEaseIn(float t,float b, float c,float d) 
  269.     return c * (t /= d) * t * t + b; 
  270.  
  271. /// <summary> 
  272. /// Easing equation function for a cubic (t^3) easing in/out: 
  273. /// acceleration until halfway, then deceleration. 
  274. /// </summary> 
  275. /// <param name="t">Current time in seconds.</param> 
  276. /// <param name="b">Starting value.</param> 
  277. /// <param name="c">Final value.</param> 
  278. /// <param name="d">Duration of animation.</param> 
  279. /// <returns>The correct value.</returns> 
  280. public staticfloat CubicEaseInOut(float t,float b, float c,float d) 
  281.     if ((t /= d / 2) < 1) 
  282.         return c / 2 * t * t * t + b; 
  283.      
  284.     return c / 2 * ((t -= 2) * t * t + 2) + b; 
  285.  
  286. /// <summary> 
  287. /// Easing equation function for a cubic (t^3) easing out/in: 
  288. /// deceleration until halfway, then acceleration. 
  289. /// </summary> 
  290. /// <param name="t">Current time in seconds.</param> 
  291. /// <param name="b">Starting value.</param> 
  292. /// <param name="c">Final value.</param> 
  293. /// <param name="d">Duration of animation.</param> 
  294. /// <returns>The correct value.</returns> 
  295. public staticfloat CubicEaseOutIn(float t,float b, float c,float d) 
  296.     if (t < d / 2) 
  297.         return CubicEaseOut(t * 2, b, c / 2, d); 
  298.      
  299.     return CubicEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  300. #endregion 
  301. #region Quartic 
  302.  
  303. /// <summary> 
  304. /// Easing equation function for a quartic (t^4) easing out: 
  305. /// decelerating from zero velocity. 
  306. /// </summary> 
  307. /// <param name="t">Current time in seconds.</param> 
  308. /// <param name="b">Starting value.</param> 
  309. /// <param name="c">Final value.</param> 
  310. /// <param name="d">Duration of animation.</param> 
  311. /// <returns>The correct value.</returns> 
  312. public staticfloat QuartEaseOut(float t,float b, float c,float d) 
  313.     return -c * ((t = t / d - 1) * t * t * t - 1) + b; 
  314.  
  315. /// <summary> 
  316. /// Easing equation function for a quartic (t^4) easing in: 
  317. /// accelerating from zero velocity. 
  318. /// </summary> 
  319. /// <param name="t">Current time in seconds.</param> 
  320. /// <param name="b">Starting value.</param> 
  321. /// <param name="c">Final value.</param> 
  322. /// <param name="d">Duration of animation.</param> 
  323. /// <returns>The correct value.</returns> 
  324. public staticfloat QuartEaseIn(float t,float b, float c,float d) 
  325.     return c * (t /= d) * t * t * t + b; 
  326.  
  327. /// <summary> 
  328. /// Easing equation function for a quartic (t^4) easing in/out: 
  329. /// acceleration until halfway, then deceleration. 
  330. /// </summary> 
  331. /// <param name="t">Current time in seconds.</param> 
  332. /// <param name="b">Starting value.</param> 
  333. /// <param name="c">Final value.</param> 
  334. /// <param name="d">Duration of animation.</param> 
  335. /// <returns>The correct value.</returns> 
  336. public staticfloat QuartEaseInOut(float t,float b, float c,float d) 
  337.     if ((t /= d / 2) < 1) 
  338.         return c / 2 * t * t * t * t + b; 
  339.      
  340.     return -c / 2 * ((t -= 2) * t * t * t - 2) + b; 
  341.  
  342. /// <summary> 
  343. /// Easing equation function for a quartic (t^4) easing out/in: 
  344. /// deceleration until halfway, then acceleration. 
  345. /// </summary> 
  346. /// <param name="t">Current time in seconds.</param> 
  347. /// <param name="b">Starting value.</param> 
  348. /// <param name="c">Final value.</param> 
  349. /// <param name="d">Duration of animation.</param> 
  350. /// <returns>The correct value.</returns> 
  351. public staticfloat QuartEaseOutIn(float t,float b, float c,float d) 
  352.     if (t < d / 2) 
  353.         return QuartEaseOut(t * 2, b, c / 2, d); 
  354.      
  355.     return QuartEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  356. #endregion 
  357. #region Quintic 
  358.  
  359. /// <summary> 
  360. /// Easing equation function for a quintic (t^5) easing out: 
  361. /// decelerating from zero velocity. 
  362. /// </summary> 
  363. /// <param name="t">Current time in seconds.</param> 
  364. /// <param name="b">Starting value.</param> 
  365. /// <param name="c">Final value.</param> 
  366. /// <param name="d">Duration of animation.</param> 
  367. /// <returns>The correct value.</returns> 
  368. public staticfloat QuintEaseOut(float t,float b, float c,float d) 
  369.     return c * ((t = t / d - 1) * t * t * t * t + 1) + b; 
  370.  
  371. /// <summary> 
  372. /// Easing equation function for a quintic (t^5) easing in: 
  373. /// accelerating from zero velocity. 
  374. /// </summary> 
  375. /// <param name="t">Current time in seconds.</param> 
  376. /// <param name="b">Starting value.</param> 
  377. /// <param name="c">Final value.</param> 
  378. /// <param name="d">Duration of animation.</param> 
  379. /// <returns>The correct value.</returns> 
  380. public staticfloat QuintEaseIn(float t,float b, float c,float d) 
  381.     return c * (t /= d) * t * t * t * t + b; 
  382.  
  383. /// <summary> 
  384. /// Easing equation function for a quintic (t^5) easing in/out: 
  385. /// acceleration until halfway, then deceleration. 
  386. /// </summary> 
  387. /// <param name="t">Current time in seconds.</param> 
  388. /// <param name="b">Starting value.</param> 
  389. /// <param name="c">Final value.</param> 
  390. /// <param name="d">Duration of animation.</param> 
  391. /// <returns>The correct value.</returns> 
  392. public staticfloat QuintEaseInOut(float t,float b, float c,float d) 
  393.     if ((t /= d / 2) < 1) 
  394.         return c / 2 * t * t * t * t * t + b; 
  395.     return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; 
  396.  
  397. /// <summary> 
  398. /// Easing equation function for a quintic (t^5) easing in/out: 
  399. /// acceleration until halfway, then deceleration. 
  400. /// </summary> 
  401. /// <param name="t">Current time in seconds.</param> 
  402. /// <param name="b">Starting value.</param> 
  403. /// <param name="c">Final value.</param> 
  404. /// <param name="d">Duration of animation.</param> 
  405. /// <returns>The correct value.</returns> 
  406. public staticfloat QuintEaseOutIn(float t,float b, float c,float d) 
  407.     if (t < d / 2) 
  408.         return QuintEaseOut(t * 2, b, c / 2, d); 
  409.     return QuintEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  410. #endregion 
  411. #region Elastic 
  412.  
  413. /// <summary> 
  414. /// Easing equation function for an elastic (exponentially decaying sine wave) easing out: 
  415. /// decelerating from zero velocity. 
  416. /// </summary> 
  417. /// <param name="t">Current time in seconds.</param> 
  418. /// <param name="b">Starting value.</param> 
  419. /// <param name="c">Final value.</param> 
  420. /// <param name="d">Duration of animation.</param> 
  421. /// <returns>The correct value.</returns> 
  422. public staticfloat ElasticEaseOut(float t,float b, float c,float d) 
  423.     if ((t /= d) == 1) 
  424.         return b + c; 
  425.      
  426.     float p = d * 0.3f; 
  427.     float s = p / 4; 
  428.      
  429.     return (c * Mathf.Pow(2, -10 * t) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p) + c + b); 
  430.  
  431. /// <summary> 
  432. /// Easing equation function for an elastic (exponentially decaying sine wave) easing in: 
  433. /// accelerating from zero velocity. 
  434. /// </summary> 
  435. /// <param name="t">Current time in seconds.</param> 
  436. /// <param name="b">Starting value.</param> 
  437. /// <param name="c">Final value.</param> 
  438. /// <param name="d">Duration of animation.</param> 
  439. /// <returns>The correct value.</returns> 
  440. public staticfloat ElasticEaseIn(float t,float b, float c,float d) 
  441.     if ((t /= d) == 1) 
  442.         return b + c; 
  443.      
  444.     float p = d * 0.3f; 
  445.     float s = p / 4; 
  446.      
  447.     return -(c * Mathf.Pow(2, 10 * (t -= 1)) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p)) + b; 
  448.  
  449. /// <summary> 
  450. /// Easing equation function for an elastic (exponentially decaying sine wave) easing in/out: 
  451. /// acceleration until halfway, then deceleration. 
  452. /// </summary> 
  453. /// <param name="t">Current time in seconds.</param> 
  454. /// <param name="b">Starting value.</param> 
  455. /// <param name="c">Final value.</param> 
  456. /// <param name="d">Duration of animation.</param> 
  457. /// <returns>The correct value.</returns> 
  458. public staticfloat ElasticEaseInOut(float t,float b, float c,float d) 
  459.     if ((t /= d / 2f) == 2) 
  460.         return b + c; 
  461.      
  462.     float p = d * (0.3f * 1.5f); 
  463.     float s = p / 4; 
  464.      
  465.     if (t < 1) 
  466.         return -0.5f * (c * Mathf.Pow(2, 10 * (t -= 1)) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p)) + b; 
  467.     return c * Mathf.Pow(2, -10 * (t -= 1)) * Mathf.Sin((t * d - s) * (2 * Mathf.PI) / p) * 0.5f + c + b; 
  468.  
  469. /// <summary> 
  470. /// Easing equation function for an elastic (exponentially decaying sine wave) easing out/in: 
  471. /// deceleration until halfway, then acceleration. 
  472. /// </summary> 
  473. /// <param name="t">Current time in seconds.</param> 
  474. /// <param name="b">Starting value.</param> 
  475. /// <param name="c">Final value.</param> 
  476. /// <param name="d">Duration of animation.</param> 
  477. /// <returns>The correct value.</returns> 
  478. public staticfloat ElasticEaseOutIn(float t,float b, float c,float d) 
  479.     if (t < d / 2) 
  480.         return ElasticEaseOut(t * 2, b, c / 2, d); 
  481.     return ElasticEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  482. #endregion 
  483. #region Bounce 
  484.  
  485. /// <summary> 
  486. /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: 
  487. /// decelerating from zero velocity. 
  488. /// </summary> 
  489. /// <param name="t">Current time in seconds.</param> 
  490. /// <param name="b">Starting value.</param> 
  491. /// <param name="c">Final value.</param> 
  492. /// <param name="d">Duration of animation.</param> 
  493. /// <returns>The correct value.</returns> 
  494. public staticfloat BounceEaseOut(float t,float b, float c,float d) 
  495.     if ((t /= d) < (1 / 2.75f)) 
  496.         return c * (7.5625f * t * t) + b; 
  497.     else if (t < (2 / 2.75f)) 
  498.         return c * (7.5625f * (t -= (1.5f / 2.75f)) * t + 0.75f) + b; 
  499.     else if (t < (2.5f / 2.75f)) 
  500.         return c * (7.5625f * (t -= (2.25f / 2.75f)) * t + 0.9375f) + b; 
  501.     else 
  502.         return c * (7.5625f * (t -= (2.625f / 2.75f)) * t + .984375f) + b; 
  503.  
  504. /// <summary> 
  505. /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: 
  506. /// accelerating from zero velocity. 
  507. /// </summary> 
  508. /// <param name="t">Current time in seconds.</param> 
  509. /// <param name="b">Starting value.</param> 
  510. /// <param name="c">Final value.</param> 
  511. /// <param name="d">Duration of animation.</param> 
  512. /// <returns>The correct value.</returns> 
  513. public staticfloat BounceEaseIn(float t,float b, float c,float d) 
  514.     return c - BounceEaseOut(d - t, 0, c, d) + b; 
  515.  
  516. /// <summary> 
  517. /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: 
  518. /// acceleration until halfway, then deceleration. 
  519. /// </summary> 
  520. /// <param name="t">Current time in seconds.</param> 
  521. /// <param name="b">Starting value.</param> 
  522. /// <param name="c">Final value.</param> 
  523. /// <param name="d">Duration of animation.</param> 
  524. /// <returns>The correct value.</returns> 
  525. public staticfloat BounceEaseInOut(float t,float b, float c,float d) 
  526.     if (t < d / 2) 
  527.         return BounceEaseIn(t * 2, 0, c, d) * 0.5f + b; 
  528.     else 
  529.         return BounceEaseOut(t * 2 - d, 0, c, d) * 0.5f + c * 0.5f + b; 
  530.  
  531. /// <summary> 
  532. /// Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out/in: 
  533. /// deceleration until halfway, then acceleration. 
  534. /// </summary> 
  535. /// <param name="t">Current time in seconds.</param> 
  536. /// <param name="b">Starting value.</param> 
  537. /// <param name="c">Final value.</param> 
  538. /// <param name="d">Duration of animation.</param> 
  539. /// <returns>The correct value.</returns> 
  540. public staticfloat BounceEaseOutIn(float t,float b, float c,float d) 
  541.     if (t < d / 2) 
  542.         return BounceEaseOut(t * 2, b, c / 2, d); 
  543.     return BounceEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  544. #endregion 
  545. #region Back 
  546.  
  547. /// <summary> 
  548. /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out: 
  549. /// decelerating from zero velocity. 
  550. /// </summary> 
  551. /// <param name="t">Current time in seconds.</param> 
  552. /// <param name="b">Starting value.</param> 
  553. /// <param name="c">Final value.</param> 
  554. /// <param name="d">Duration of animation.</param> 
  555. /// <returns>The correct value.</returns> 
  556. public staticfloat BackEaseOut(float t,float b, float c,float d) 
  557.     return c * ((t = t / d - 1) * t * ((1.70158f + 1) * t + 1.70158f) + 1) + b; 
  558.  
  559. /// <summary> 
  560. /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in: 
  561. /// accelerating from zero velocity. 
  562. /// </summary> 
  563. /// <param name="t">Current time in seconds.</param> 
  564. /// <param name="b">Starting value.</param> 
  565. /// <param name="c">Final value.</param> 
  566. /// <param name="d">Duration of animation.</param> 
  567. /// <returns>The correct value.</returns> 
  568. public staticfloat BackEaseIn(float t,float b, float c,float d) 
  569.     return c * (t /= d) * t * ((1.70158f + 1) * t - 1.70158f) + b; 
  570.  
  571. /// <summary> 
  572. /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing in/out: 
  573. /// acceleration until halfway, then deceleration. 
  574. /// </summary> 
  575. /// <param name="t">Current time in seconds.</param> 
  576. /// <param name="b">Starting value.</param> 
  577. /// <param name="c">Final value.</param> 
  578. /// <param name="d">Duration of animation.</param> 
  579. /// <returns>The correct value.</returns> 
  580. public staticfloat BackEaseInOut(float t,float b, float c,float d) 
  581.     float s = 1.70158f; 
  582.     if ((t /= d / 2) < 1) 
  583.         return c / 2 * (t * t * (((s *= (1.525f)) + 1) * t - s)) + b; 
  584.     return c / 2 * ((t -= 2) * t * (((s *= (1.525f)) + 1) * t + s) + 2) + b; 
  585.  
  586. /// <summary> 
  587. /// Easing equation function for a back (overshooting cubic easing: (s+1)*t^3 - s*t^2) easing out/in: 
  588. /// deceleration until halfway, then acceleration. 
  589. /// </summary> 
  590. /// <param name="t">Current time in seconds.</param> 
  591. /// <param name="b">Starting value.</param> 
  592. /// <param name="c">Final value.</param> 
  593. /// <param name="d">Duration of animation.</param> 
  594. /// <returns>The correct value.</returns> 
  595. public staticfloat BackEaseOutIn(float t,float b, float c,float d) 
  596.     if (t < d / 2) 
  597.         return BackEaseOut(t * 2, b, c / 2, d); 
  598.     return BackEaseIn((t * 2) - d, b + c / 2, c / 2, d); 
  599. #endregion 

小结:

       首先,非常感谢TextFx的作者,然后 TextFx 的插件真的很棒,实用又简单,而不会华而不实。在UITweener的文章中也对缓动函数有介绍,贴出其中30种的轨迹图,会更加直观。此文是为了大家能够检索到需要的内容。

       在UITweener的文末附上了30中缓动曲线的图形,感觉有点不够动态,参考①中给出的效果会更好些,更容易理解和体会。』

                                                                                                                                                                            增补于 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

0 0