Matrix3D.interpolate - azupko's workaround
forked from Matrix3D.interpolate - umhr vs. Adobe (diff: 209)
ActionScript3 source code
/**
* Copyright yonatan ( http://wonderfl.net/user/yonatan )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/rVRb
*/
package {
import flash.display.Sprite;
import flash.events.*;
import flash.utils.*;
import flash.geom.Matrix3D;
public class MatrixTest extends Sprite {
private var r:Sprite, g:Sprite, b:Sprite;
public function MatrixTest() {
var array:Array = [];
for each( var color:uint in [0xFF0000,0x00FF00,0x0000FF] ) {
var s:Sprite = new Sprite;
s.graphics.beginFill( color );
s.graphics.drawRect( 0, 0, 100, 100 );
s.graphics.endFill();
s.alpha = 0.5;
addChild(s);
array.push( s );
}
r = array[0];
g = array[1];
b = array[2];
r.x = r.y = 30;
r.rotationY = r.rotationY = 40;
b.rotationX = 80;
b.x = b.y = 333;
addEventListener( Event.ENTER_FRAME, onEnter );
}
// use Matrix3D.interpolate to calculate a new matrix for g
private function onEnter( e:Event ):void {
var t:Number = Math.sin( getTimer()/1000 )/2+0.5;
b.scaleX = b.scaleY = b.scaleZ = r.scaleX = r.scaleY = r.scaleZ = 1;
g.transform.matrix3D = Matrix3D.interpolate( r.transform.matrix3D, b.transform.matrix3D, t );
r.scaleX = 1;
r.scaleY = 0.5;
r.scaleZ = 0.75;
b.scaleX = 0.5;
b.scaleY = 2;
b.scaleZ = 1;
g.scaleX = r.scaleX+(b.scaleX-r.scaleX)*t;
g.scaleY = r.scaleY+(b.scaleY-r.scaleY)*t;
g.scaleZ = r.scaleZ+(b.scaleZ-r.scaleZ)*t;
}
}
}