Matrix3D.interpolate - azupko's workaround

by yonatan forked from Matrix3D.interpolate - umhr vs. Adobe (diff: 209)
♥0 | Line 43 | Modified 2009-05-13 22:04:03 | MIT License
play

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;
            
         }
     }
 }