1 package flare.animate.interpolate
3 import flash.geom.Matrix;
6 * Interpolator for <code>flash.geom.Matrix</code> values.
8 public class MatrixInterpolator extends Interpolator
10 private var _startA:Number, _startB:Number, _startC:Number;
11 private var _startD:Number, _startX:Number, _startY:Number;
12 private var _rangeA:Number, _rangeB:Number, _rangeC:Number;
13 private var _rangeD:Number, _rangeX:Number, _rangeY:Number;
14 private var _cur:Matrix;
17 * Creates a new MatrixInterpolator.
18 * @param target the object whose property is being interpolated
19 * @param property the property to interpolate
20 * @param start the starting matrix value to interpolate from
21 * @param end the target matrix value to interpolate to
23 public function MatrixInterpolator(target:Object, property:String,
24 start:Object, end:Object)
26 super(target, property, start, end);
30 * Initializes this interpolator.
31 * @param start the starting value of the interpolation
32 * @param end the target value of the interpolation
34 protected override function init(start:Object, end:Object) : void
36 var e:Matrix = Matrix(end), s:Matrix = Matrix(start);
37 if (_cur == null || _cur == s || _cur == e)
46 _rangeA = e.a - _startA;
47 _rangeB = e.b - _startB;
48 _rangeC = e.c - _startC;
49 _rangeD = e.d - _startD;
50 _rangeX = e.tx - _startX;
51 _rangeY = e.ty - _startY;
55 * Calculate and set an interpolated property value.
56 * @param f the interpolation fraction (typically between 0 and 1)
58 public override function interpolate(f:Number) : void
60 _cur.a = _startA + f * _rangeA;
61 _cur.b = _startB + f * _rangeB;
62 _cur.c = _startC + f * _rangeC;
63 _cur.d = _startD + f * _rangeD;
64 _cur.tx = _startX + f * _rangeX;
65 _cur.ty = _startY + f * _rangeY;
66 _prop.setValue(_target, _cur);
69 } // end of class MatrixInterpolator