In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: 質問: 3D Carousel

Flash 10 で被写界深度ネタ Z-sortつき
Get Adobe Flash player
by BTI 25 Dec 2011
    Embed
/**
 * Copyright BTI ( http://wonderfl.net/user/BTI )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/y0nu
 */

//// Flash 10 で被写界深度ネタ Z-sortつき
package{
  import flash.display.*
  import flash.events.*
  import flash.filters.BlurFilter;
  import flash.geom.*;
  
  [SWF(frameRate="90", width="465", height="465")]
  public class Main extends Sprite {

  public function Main() {
      
      var main :Sprite = Sprite(addChild(new Sprite()))
      main.x = stage.stageWidth / 2
      main.y = stage.stageHeight / 2
      var wrap :Sprite = Sprite(main.addChild(new Sprite()))
      
      var pp:PerspectiveProjection = root.transform.perspectiveProjection; 
      
      var objs:Array = []
      for(var i:int=0; i<15; i++)
      {
        var sp: Sprite = Sprite(wrap.addChild(new Sprite()))
        sp.graphics.beginFill(0xFFFFFF * Math.random())
        sp.graphics.drawRect(-25, -25, 50, 50)
        sp.x = 200 * Math.sin( i * 360 / 15 * Math.PI / 180)
        sp.z = 200 * Math.cos( i * 360 / 15 * Math.PI / 180);
        sp.rotationY=  i * 360 / 15;
        objs.push(sp)
      }
      
      stage.addEventListener(Event.ENTER_FRAME, function(e:Event):void
      {
        pp.projectionCenter = new Point(stage.stageWidth / 2,
                  stage.stageHeight / 2 - 100)
        
        wrap.rotationY += (-mouseX / stage.stageWidth * 480 - wrap.rotationY) * 0.01
       // wrap.rotationX -= (mouseY / stage.stageHeight * 480 - wrap.rotationX) * 0.05;

               
        var arr:Array = []
        for (var i:int=0; i<objs.length; i++) {
          var ele:Sprite = objs[i] as Sprite
          //ele.rotationY = 0.//-wrap.rotationY
          var mtx:Matrix3D = ele.transform.getRelativeMatrix3D(main)
          arr.push( { ele:ele, z:mtx.position.z } )
        }

        arr.sortOn("z", Array.NUMERIC | Array.DESCENDING)
        var baseZ:Number = wrap.z
        for (i=0; i<arr.length; i++) {
          ele = arr[i].ele as Sprite
          var z:Number = arr[i].z
          wrap.setChildIndex(ele, i)
          var b:Number = Math.abs(z)
          
          // focus depth blur effect, warning, very slow:
          b = z/20
 //         ele.filters = new BlurFilter(b, b, 3);
          
        }
      })
    }
  }
}