Home

AS3 Easing

Monday, August 14th, 2006 | Author: dehash

Using the Penner easing equations directly:

Actionscript:
  1. // DoEasing.as
  2. package {
  3. import flash.display.Sprite;
  4. import flash.events.Event;
  5. public class DoEasing extends Sprite {
  6. private var ball:TweenBall;
  7. public function DoEasing() {
  8. ball = new TweenBall();
  9. ball.x = 50;
  10. ball.y = 100;
  11. addChild(ball);
  12. }
  13. }
  14. }
  15. // TweenBall.as
  16. package {
  17. import flash.display.Sprite;
  18. import flash.events.Event;
  19. public class TweenBall extends Sprite {
  20. private var t:Number;
  21. private var b:Number;
  22. private var c:Number;
  23. private var d:Number;
  24. private var a:Number;
  25. private var p:Number;
  26. public function TweenBall() {
  27. t=0; b=50; c=300; d=600; a=c; p=d/2;
  28. graphics.beginFill(0xFF6600);
  29. graphics.drawCircle(0, 0, 20);
  30. addEventListener(Event.ENTER_FRAME, onEnterFrame);
  31. }
  32. private function onEnterFrame(evt:Event):void {
  33. x=easeInOut(t,b,c,d,a,p);
  34. if(++t>d){
  35. xtrace([x,"complete"]); t=0;b=x;c=-c;
  36. }
  37. }// Elastic Easing from http://www.robertpenner.com/easing/
  38. private function easeInOut (t:Number, b:Number, c:Number, d:Number, a:Number, p:Number):Number {
  39. if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
  40. var s:Number; if (!a || a <Math.abs(c)) { a=c; s=p/4; } else s = p/(2*Math.PI) * Math.asin (c/a);
  41. if (t <1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
  42. return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
  43. }
  44. }
  45. }

Tags »

 | Comments Feed: RSS 2.0
Category: Flash

You can leave a response.

Leave a Reply

CAPTCHA Image