Beautifl - Flash Gallery

Preview

万華鏡
178ep3 2009年8月27日 MIT License
?
ドラッグすると動きます  
コードが汚いです。
      // ドラッグすると動きます
//コードが汚いです。

package
{
    import flash.display.BitmapData;
    import flash.display.Loader;
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.net.URLRequest;
        import flash.system.Security;
    
[SWF(width='465',height='465',backgroundColor='0x00',frameRate='30')]
    public class TriCir extends Sprite
    {
        private var _stg:Sprite;
        private var list:Array = [];
        private var g:BitmapData;
        
        public function TriCir()
        {
            _stg = addChild(new Sprite())as Sprite;
            
            var maru:Shape = addChild(new Shape())as Shape
            maru.graphics.beginFill(0xff0000,0.5);
            maru.graphics.drawCircle(stage.stageWidth/2,stage.stageHeight/2,150);
            maru.graphics.endFill();
            _stg.mask = maru;
            
            Security.loadPolicyFile("http://www.178design.com/crossdomain.xml");
             var loader:Loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, com);
            loader.load(new URLRequest("http://www.178design.com/swf/wonderfl/1.jpg"));
            
            function com(e:Event):void
            {
                init(loader);
            }
        }
        
        private function init(loader:Loader):void
        {
            g = new BitmapData(200,150);
            g.draw(loader);
            var xx:Number;
            var yy:Number;
            var w:Number;
            var h:Number;
            for(var i:uint=0; i<3; i++)
            {
                xx = stage.stageWidth/2;
                yy = stage.stageHeight/2;
                
                var n:One = _stg.addChild(new One(g))as One;
                Create(n,0,xx,yy);
                
                if(i==0)
                {
                    w = n.width;
                    h = n.height;
                }
                
                var nh:One = _stg.addChild(new One(g))as One;
                Create(nh,60,xx,yy,-1);
                
                xx = stage.stageWidth/2 + h*2*Math.cos((i*120-30)*Math.PI/180);
                yy = stage.stageHeight/2 + h*2*Math.sin((i*120-30)*Math.PI/180);
                
                var rn:One = _stg.addChild(new One(g))as One;
                Create(rn,-120,xx,yy,1,-1);
                
                var rh:One = _stg.addChild(new One(g))as One;
                Create(rh,120,xx,yy);
                
                var rh2:One = _stg.addChild(new One(g))as One;
                Create(rh2,0,xx,yy);
                
                xx = stage.stageWidth/2 + h*2*Math.cos((i*120+30)*Math.PI/180);
                yy = stage.stageHeight/2 + h*2*Math.sin((i*120+30)*Math.PI/180);
                
                var r2n:One = _stg.addChild(new One(g))as One;
                Create(r2n,120,xx,yy);
                
                var r2h:One = _stg.addChild(new One(g))as One;
                Create(r2h,180,xx,yy,-1);
                
                var r2h2:One = _stg.addChild(new One(g))as One;
                Create(r2h2,60,xx,yy,-1);
            }
            
            function Create(o:One,rot:int,xx:Number,yy:Number,sx:int=1,sy:int=1):void
            {
                o.rotation = i*120+rot;
                o.scaleX = sx;
                o.scaleY = sy;
                o.x = xx;
                o.y = yy;
                list.push(o);
            }
            
            Play();
        }
        
        private function Play():void
        {
            stage.addEventListener(MouseEvent.MOUSE_DOWN,down);
            stage.addEventListener(MouseEvent.MOUSE_UP,up);
            var len:uint = list.length;
            var pm:Point = new Point(mouseX,mouseY);
            var mx:Number = mouseX-pm.x;
            var my:Number = mouseY-pm.y;
            var gg:BitmapData = g.clone();
            
            function down(e:MouseEvent):void
            {
                mx = my = 0;
                                pm.x = mouseX;
                pm.y = mouseY;
                gg = g.clone();
                stage.addEventListener(MouseEvent.MOUSE_MOVE,move);
            }
            
            function up(e:MouseEvent):void
            {
                stage.removeEventListener(MouseEvent.MOUSE_MOVE,move);
                for(var q:uint=0; q<len; q++)
                {
                    list[q].nx = list[q].ny = -100;
                    list[q].UP(g,0,0);
                }
            }
            
            function move(e:MouseEvent):void
            {
                mx = mouseX-pm.x;
                my = mouseY-pm.y;
                
                for(var q:uint=0; q<len; q++)
                {
                    list[q].UP(gg,mx,my);
                }
                
                pm.x = mouseX;
                pm.y = mouseY;
            }
        }
    }
}
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.geom.Point;
    import flash.display.BitmapData;
    import flash.geom.Matrix;

class One extends Sprite
{
    private var ss:Shape;
    private var mtr:Matrix = new Matrix();
    public var nx:Number = -100;
    public var ny:Number = -100;
    
    public function One(a:BitmapData)
    {
        ss = addChild(new Shape())as Shape;
        mtr.createBox(1,1,0,-100,-100);
        UP(a,0,0);
        ss.y =ss.height;
    }
    
    public function UP(_src:BitmapData,mx:Number,my:Number):void
    {
        nx += mx;
        ny += my;
        mtr.createBox(1,1,0,nx,ny);
        ss.graphics.clear();
        ss.graphics.beginBitmapFill(_src,mtr);
        
        var p:Point = Point.polar(50,30*Math.PI/180);
        var p1:Point = Point.polar(50,150*Math.PI/180);
        var p2:Point = Point.polar(50,270*Math.PI/180);
        
        ss.graphics.moveTo(p.x,p.y-p.y);
        ss.graphics.lineTo(p1.x,p1.y-p.y);
        ss.graphics.lineTo(p2.x,p2.y-p.y);
        ss.graphics.lineTo(p.x,p.y-p.y);
        ss.graphics.endFill();
    }
}