AS3 Easing
Monday, August 14th, 2006 | Author: dehash
Using the Penner easing equations directly:
Actionscript:
-
// DoEasing.as
-
package {
-
import flash.display.Sprite;
-
import flash.events.Event;
-
public class DoEasing extends Sprite {
-
private var ball:TweenBall;
-
public function DoEasing() {
-
ball = new TweenBall();
-
ball.x = 50;
-
ball.y = 100;
-
addChild(ball);
-
}
-
}
-
}
-
// TweenBall.as
-
package {
-
import flash.display.Sprite;
-
import flash.events.Event;
-
public class TweenBall extends Sprite {
-
private var t:Number;
-
private var b:Number;
-
private var c:Number;
-
private var d:Number;
-
private var a:Number;
-
private var p:Number;
-
public function TweenBall() {
-
t=0; b=50; c=300; d=600; a=c; p=d/2;
-
graphics.beginFill(0xFF6600);
-
graphics.drawCircle(0, 0, 20);
-
addEventListener(Event.ENTER_FRAME, onEnterFrame);
-
}
-
private function onEnterFrame(evt:Event):void {
-
x=easeInOut(t,b,c,d,a,p);
-
if(++t>d){
-
xtrace([x,"complete"]); t=0;b=x;c=-c;
-
}
-
}// Elastic Easing from http://www.robertpenner.com/easing/
-
private function easeInOut (t:Number, b:Number, c:Number, d:Number, a:Number, p:Number):Number {
-
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
-
var s:Number; if (!a || a <Math.abs(c)) { a=c; s=p/4; } else s = p/(2*Math.PI) * Math.asin (c/a);
-
if (t <1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
-
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
-
}
-
}
-
}


