Beautifl - Flash Gallery

Thumbnail : SeaofSphere
SeaofSphere
feb19 2009-08-30 All rights reserved

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

// write as3 code here..
package 
{
    import flash.display.BlendMode;
    import flash.display.MovieClip;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.filters.BlurFilter;
    
    /**
     * ...
     * @author Nobuhiro Takahashi
     */
    [SWF(width="465", height="465", backgroundColor=0x000000, frameRate=30)]
    public class SeaOfSphere extends Sprite
    {
        private var fl:Number = 300;
        private var vpX:Number;
        private var vpY:Number;
        
        private var world:Sprite = new Sprite();
        private var spheres:Array = new Array();
        
        public function SeaOfSphere()
        {
            vpX = this.stage.stageWidth / 2;
            vpY = this.stage.stageHeight / 2;
            
            addChild(world);
            
            var blend:Array = [];
            blend = [
                BlendMode.NORMAL,
                BlendMode.HARDLIGHT,
                BlendMode.DARKEN,
                BlendMode.MULTIPLY,
                BlendMode.ADD,
                BlendMode.DIFFERENCE,
                BlendMode.ERASE,
                BlendMode.INVERT,
                BlendMode.OVERLAY,
                BlendMode.SUBTRACT
            ];
            
            var blur:BlurFilter = new BlurFilter(32, 32, 1);
            for (var i:int = 0; i < 30; i++)
            {
                var sphere:MovieClip = new MovieClip();
                
                sphere.xpos = Math.random() * 200 - 100;
                sphere.ypos = Math.random() * -200;
                sphere.zpos = Math.random() * 100 - 50;
                sphere.startX = sphere.xpos;
                sphere.startY = sphere.ypos;
                sphere.startZ = sphere.zpos;
                sphere.r = Math.random() * 360 - 180;
                sphere.v = Math.random() * 1 - .5;
                
                var s:Shape = new Shape();
                s.graphics.beginFill(Math.random() * 0x9fffff, 1);
                s.graphics.drawCircle(0, 0, Math.random() * 30 + 30);
                s.graphics.endFill();
                s.filters = [blur];
                //sphere.blendMode = blend[Math.floor(Math.random() * blend.length)];
                sphere.blendMode = BlendMode.ADD;
                
                sphere.addChild(s);
                world.addChild(sphere);
                
                
                spheres.push(sphere);
            }
            
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
        private function enterFrameHandler(e:Event):void
        {
            for (var i:int = 0; i < spheres.length; i++)
            {
                spheres[i].r += spheres[i].v;
                spheres[i].xpos = Math.cos(spheres[i].r / 180 * Math.PI) * 120 + spheres[i].startX;
                spheres[i].ypos = Math.sin(spheres[i].r / 180 * Math.PI) * -120 + spheres[i].startY;
                spheres[i].zpos = Math.sin(spheres[i].r / 180 * Math.PI) * 200 + spheres[i].startZ;
            }
            
            for (i = 0; i < spheres.length; i++)
            {
                var scale:Number = fl / (fl + spheres[i].zpos);
                spheres[i].scaleX = spheres[i].scaleY = scale;
                spheres[i].x = vpX + spheres[i].xpos * scale;
                spheres[i].y = vpY + spheres[i].ypos * scale;
            }
            
            spheres.sortOn("zpos", Array.DESCENDING);
            for (i = 0; i < spheres.length; i++)
            {
                world.setChildIndex(spheres[i], world.numChildren - 1);
            }
        }
    }
    
}