forked from: flash on 2010-7-23

by dizgid forked from flash on 2010-7-23 (diff: 21)
♥0 | Line 164 | Modified 2010-07-24 14:33:36 | MIT License
play

ActionScript3 source code

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

// forked from dizgid's flash on 2010-7-23
package {
    import flash.events.KeyboardEvent;
    import flash.display.Graphics;
    import flash.geom.Point;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.display.Sprite;
    public class FlashTest extends Sprite {
        private var _dots:Array;
        private var _prots:Array;
        
        private var _base:Sprite;
        private var _limit:Number = 300;
        
        private var _w_num:int = 12;
        private var _h_num:int = 12;
        private var _offset:Number = 40.0;//間隔
        
        private var _volume:Number = 20.0;
        public function FlashTest() {
            // write as3 code here..
           _base = new Sprite();
           _base.graphics.beginFill(0x666666,0.5);
           _base.graphics.drawRect(0,0,stage.stageWidth, stage.stageWidth);
           _base.graphics.endFill();
           
           _base.graphics.lineStyle(0, 0xff0000);
           _base.graphics.drawRect(0,0,(_w_num-1)*_offset, (_h_num-1)*_offset);
           this.addChild(_base);
           
            _dots = [];
            _prots = [];
            for(var i:int =0; i < _w_num*_h_num; i++){
                var d:Dot = new Dot();
                this.addChild(d);
                _dots.push(d);
                d.x = Math.floor(i % _w_num) * _offset;
                d.y = Math.floor(i / _w_num) * _offset;
                
                d.initX = d.x;
                d.initY = d.y;
            }

            this.addEventListener(Event.EXIT_FRAME, enterFrameHandler);
            _base.addEventListener(MouseEvent.CLICK, mouseHandler);
            
            stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
        }
        public function mouseHandler(e:MouseEvent):void
        {
            var p:Prot = new Prot();
            this.addChild(p);
            p.x = stage.mouseX;
            p.y = stage.mouseY;
            _prots.push(p);
        }
        private function keyDownHandler(e:KeyboardEvent):void
        {
            var p:Prot = _prots[0];
            this.removeChild(p);
            _prots.shift();
        }
        
        public function enterFrameHandler(e:Event):void
        {
            for(var i:int = 0; i < _dots.length; i++){
                var d:Dot= _dots[i];
                var distance:Number=0;
                var mPer:Number = 0;
                d.vecX = 0;
                d.vecY = 0;
                //for(var n:int = 0; n < 1; n++){
                for(var n:int = 0; n < _prots.length; n++){
                    var p:Prot = _prots[n];
                    var mx:Number = p.x;
                    var my:Number = p.y;
                    var dx:Number = mx - d.initX;
                    var dy:Number = my - d.initY;
                    var t_distance:Number = Math.sqrt(dx * dx + dy*dy);
                    
                    var vec:Point = new Point(dx, dy);
                    vec.normalize(1);
                    
                    if(t_distance > _limit){
                        t_distance = _limit;
                    }
                    var t_per:Number = (1-(t_distance/_limit));
                    mPer += t_per;
                    
                    d.vecX += t_per * vec.x;
                    d.vecY += t_per * vec.y;
                }
               if(mPer > 1){
                   mPer = 1;
               }
               var per:Number = mPer;
                
                var mVec:Point = new Point(d.vecX, d.vecY);
                mVec.normalize(1);
                if(Math.floor(i%_w_num) != 0 && Math.floor(i%_w_num) != _w_num-1){
                    d.x = d.initX - per*_volume * d.vecX;
                    //d.x = d.initX - per*20 * mVec.x;
                }
                if(Math.floor(i/_w_num) != _h_num-1 && Math.floor(i/_w_num) != 0){
                    d.y = d.initY - per*_volume * d.vecY;
                    //d.y = d.initY - per*20 * mVec.y;
                }
                d.scaleX = d.scaleY = per;
            }
               
            render();
        }
        
        private function render():void
        {
           var g:Graphics = this.graphics; 
            g.clear();
            g.lineStyle(0, 0x333333);
            for(var n:int = 0; n < _h_num; n++)
            {
                for(var i:int = 0; i < _w_num; i++)
                {
                    var d:Dot = _dots[(n*_w_num)+i];
                    if(i == 0)
                    {
                          g.moveTo(d.x, d.y);
                    }else{
                          g.lineTo(d.x, d.y);
                          if(n < _h_num-1){
                              var nd:Dot = _dots[((n+1)*_w_num)+i];
                              g.lineTo(nd.x, nd.y);
                              g.moveTo(d.x, d.y)
                          }
                    }
                }
            }

        }

    }
    

}
import flash.events.MouseEvent;
import flash.events.Event;
import flash.display.Graphics;

import flash.display.Sprite;

internal class Dot extends Sprite{
    public var vecX:Number=0;
    public var vecY:Number=0;
    
    public var initX:Number;
    public var initY:Number;
    public function Dot()
    {
        var g:Graphics = this.graphics;
        g.beginFill(0x333333, 0.25);
        g.drawCircle(0,0,10);
        g.endFill();
    }
}

internal class Prot extends Sprite{
    public function Prot()
    {
        var g:Graphics = this.graphics;
        g.beginFill(0x000000, 0.5);
        g.drawCircle(0,0,10);
        g.endFill();
        
        this.addEventListener(Event.ENTER_FRAME, enterframeHandler);
        this.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    }
    private var _isDrag:Boolean;
    private function mouseDownHandler(e:MouseEvent):void
    {
        _isDrag = true;
        stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
        this.startDrag();
        
    }
    private function mouseUpHandler(e:MouseEvent):void
    {
        _isDrag = false;
        stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler);
        this.stopDrag();
    }


    private function enterframeHandler(e:Event):void
    {
        
    }

}