topical media & game development

talk show tell print

#graphic-flex-image-effects-06-Flex-InterpolateTest.ax

#graphic-flex-image-effects-06-Flex-InterpolateTest.ax [swf] [flash] flex


  package {
  
          import flash.display.Shape;
          import flash.display.Sprite;
          import flash.geom.Matrix3D;
          import flash.geom.Vector3D;
  
          [SWF(width=550, height=400, backgroundColor=0xFFFFFF)]
  
          
Demonstrates how Matrix3D.interpolate() may be used to draw blends between two shapes in 3D space.

  
          public class @ax-graphic-flex-image-effects-06-Flex-InterpolateTest extends Sprite {
  
                  private static const TOTAL_INTERPOLATED_SHAPES:uint = 100;
  
                  
Constructor. Draws and positions all shapes in the blended box shape.

  
                  public function @ax-graphic-flex-image-effects-06-Flex-InterpolateTest() {
                          // creates rotated view of whole sprite
                          rotationX = 30;
  
                          // two colors to be used at either end of the shape blend
                          var startColor:uint = 0xFF0000;
                          var endColor:uint = 0xFFCC00;
  
                          // draw the bottom of the box shape
                          var startShape:Shape = createShape(startColor);
                          // move and rotate shape into position
                          var startMatrix:Matrix3D = new Matrix3D();
                          startMatrix.appendRotation(-90, Vector3D.X_AXIS);
                          startMatrix.appendRotation(-45, Vector3D.Y_AXIS);
                          startMatrix.appendTranslation(275, 250, -100);
                          startShape.transform.matrix3D = startMatrix;
  
                          // draw top shape of box blend
                          var endShape:Shape = createShape(endColor);
                          // use bottom's matrix, but move it up y axis by 200 units
                          var endMatrix:Matrix3D = startMatrix.clone();
                          endMatrix.appendTranslation(0, -200, 0);
                          endShape.transform.matrix3D = endMatrix;
  
                          // draw all intermediate shapes
                          var shape:Shape;
                          for (var i:uint = 0; i < TOTAL_INTERPOLATED_SHAPES; i++) {
                                  // draw shape of intermediate color
                                  shape = createShape(getColor(startColor, endColor, i));
                                  // position shape with intermediate transform
                                  shape.transform.matrix3D = Matrix3D.interpolate(
                                          startMatrix,
                                          endMatrix,
                                          getPercent(i)
                                  );
                          }
  
                          addChild(endShape);
                  }
  
                  
Returns intermediate color between start and end colors using the current shape index.
parameter: startColor The start color of the blend.
parameter: endColor The end color of the blend.
parameter: index The index of the shape being drawn.
returns: Returns the intermediate color for the specified shape index.

  
                  private function getColor(
                          startColor:uint,
                          endColor:uint,
                          index:uint
                  ):uint {
                          var percent:Number = getPercent(index);
                          // find each of the component values for the start and end colors
                          var startRed:uint = startColor >> 16 & 0xFF;
                          var startGreen:uint = startColor >> 8 & 0xFF;
                          var startBlue:uint = startColor & 0xFF;
                          var endRed:uint = endColor >> 16 & 0xFF;
                          var endGreen:uint = endColor >> 8 & 0xFF;
                          var endBlue:uint = endColor & 0xFF;
                          // calculate intermediate values
                          var red:uint = (endRed - startRed)*percent + startRed;
                          var green:uint = (endGreen - startGreen)*percent + startGreen;
                          var blue:uint = (endBlue - startBlue)*percent + startBlue;
                          // combine intermediate component values into full color
                          return red << 16 | green << 8 | blue;
                  }
  
                  
Returns the percent of the index value within the total number of interpolated shapes.
parameter: index The index to determine the percentage for.
returns: The percent for the index within the total interpolated shapes.

  
                  private function getPercent(index:uint):Number {
                          return (index+1)/(TOTAL_INTERPOLATED_SHAPES+1);
                  }
  
                  
Draws a shape with the specified color and adds it to the stage.
parameter: color The color of the shape.
returns: The shape created.

  
                  private function createShape(color:uint):Shape {
                          var shape:Shape = new Shape();
                          shape.graphics.beginFill(color);
                          shape.graphics.drawRect(-100, -100, 200, 200);
                          shape.graphics.endFill();
                          addChild(shape);
                          return shape;
                  }
  
          }
  
  }


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.