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

flash on 2009-10-14

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

// forked from clockmaker's 3D Carousel 
// 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) 
         
        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.05 
         
        var arr:Array = [] 
        for (var i:int=0; i<objs.length; i++) { 
          var ele:Sprite = objs[i] as Sprite 
          ele.rotationY = -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/10 
          ele.filters = (b > 3) ? [new BlurFilter(b, b, 3)] : [] 
        } 
      }) 
    } 
  } 
}