色表現練習5

by gaziya forked from 色表現練習4 (diff: 33)
♥0 | Line 86 | Modified 2011-11-14 21:37:57 | MIT License
play

ActionScript3 source code

/**
 * Copyright gaziya ( http://wonderfl.net/user/gaziya )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/nY1H
 */

// forked from gaziya's 色表現練習4
// forked from gaziya's 色表現練習1
package {
    import flash.filters.DropShadowFilter;
    import flash.filters.ShaderFilter;
    import flash.filters.GradientBevelFilter;
    import flash.filters.GradientGlowFilter;
    import flash.filters.GlowFilter
    import flash.filters.BlurFilter
    import flash.utils.setInterval
    import flash.geom.Matrix3D
    import flash.display.Shape
    import flash.events.Event
    import flash.geom.Vector3D
    import flash.display.Sprite
    [SWF(width=465,height=465,frameRate=30)]
    
    public class FlashTest extends Sprite {
        public function FlashTest() {
            graphics.beginFill(0x505050)                
            graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight)            
            var container:Sprite= addChild(new Sprite) as Sprite
            with (container) {
                x = stage.stageWidth/2
                y = stage.stageHeight/2
                z = -150
            }
            var shapes:Vector.<Shape> = new Vector.<Shape>                       
            for (var i:int = 0; i <1000; i++){
                var radius:Number = Math.sqrt(Math.random())*200 + 100
                var theta_x:Number = Math.random()*360
                var theta_y:Number = Math.random()*360
                var rect:Shape = container.addChild(new Shape) as Shape
                shapes.push(rect)
                var rect_size:int = Math.random()*20 + 10
                var color:int =  Math.random()*0x100 << 16 | Math.random()*0x100 << 8 | Math.random()*0x100                
                with (rect) {                    
                    graphics.beginFill(color)                
                    graphics.drawRect(-rect_size/2, -rect_size/2,rect_size,rect_size)                            
                    rotationX = -theta_x
                    rotationY = theta_y
                    x = radius * Math.cos(theta_x*Math.PI/180) * Math.sin(theta_y*Math.PI/180)
                    y = radius * Math.sin(theta_x*Math.PI/180)
                    z = radius * Math.cos(theta_x*Math.PI/180) * Math.cos(theta_y*Math.PI/180)   
                }             
            }          
            addEventListener(Event.ENTER_FRAME, loop)
            
            var theta:Number = 0
            var tilt:Number = 0
            var filters:Array = [
                    new GlowFilter(0x0,1,20,20),
                    new GlowFilter(0xffffff,0.8,10,10),
                    new GlowFilter(0xff0000,0.6,5,5),
                    new GlowFilter(0xff00),
                    new GlowFilter(0xff),
                    new BlurFilter,
                    new DropShadowFilter                    
                ] 
            var idx:int = 0
            setInterval(function():void {
                idx ++
                if (idx == filters.length) idx = 0
            },2000)
            
            function loop(e:Event):void {
                theta = (theta+1)%360
                tilt = (tilt+0.1)%360
                var matrix:Matrix3D = new Matrix3D              
                matrix.appendRotation(theta,Vector3D.Y_AXIS)    
                var position_z:Array = new Array
                var i:int
                for (i = 0; i < shapes.length;i++) {
                    var vector:Vector3D = matrix.transformVector(new Vector3D(shapes[i].x,shapes[i].y,shapes[i].z))
                    position_z.push({idx:i, z:vector.z})
                }
                position_z.sortOn("z", Array.NUMERIC | Array.DESCENDING)
                for (i = 0; i < container.numChildren; i++) {container.removeChildAt(0)}                
                for (i = 0; i < shapes.length;i++) {
                    if (position_z[i].z > 30) {
                        container.addChild(shapes[position_z[i].idx])   
                        var blur:Number = position_z[i].z/30 - 0.8    
                        shapes[position_z[i].idx].filters = [filters[idx]]         
                    }
                }
                container.rotationY = theta
                container.rotationZ = tilt          
            }    
        }
    }
}

Forked