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 2013-9-30

Get Adobe Flash player
by slugii.chen 30 Sep 2013
    Embed
/**
 * Copyright slugii.chen ( http://wonderfl.net/user/slugii.chen )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qGOd
 */

package 
{
    import flash.events.MouseEvent;
    import flash.display.AVM1Movie;
    import flash.events.Event;
    import flash.display.Shape;
    import flash.display.Sprite;
    public class FlashTest extends Sprite 
    {
        private var mass:Number = 6;    //总质量
        private var len:Number = 1;   //总长度
        private var div:Number = 50;    //
        private var massDiv:Number = mass / div;    //每一节的质量
        private var lenDiv:Number = len / div;        //每一节的长度
        
        private var cX:Number = 300;
        private var cY:Number = 200;
        private var cR:Number = 50;
        
        private var g:Number = 9.81;        //重力加速度
        private var pm:Number = 100;        // Pixels/meter //像素相对 米的长度比例                总长度为3米 有50节  那么每节相当于1.5个像素
        private var dt:Number = 1 / 60;    //时间单位        帧频为60的画 dt 相当于一帧的时间 这是时间单位
        private var itr:uint = 3;
        private var pX:Array = [];
        private var pY:Array = [];
        private var oX:Array = [];
        private var oY:Array = [];
        private var aX:Array = [];
        private var aY:Array = [];
        
        private var mS:Shape = new Shape(); //每一个点的形状  我在这里 只是当他为一个空点 然后每2个点之间用直线连接
        
        private var fish_1:Sprite = new Sprite();    //第一个鱼
        private var fish_2:Sprite = new Sprite();    //第二条鱼
        
        public function FlashTest() 
        {
            // write as3 code here..
            //初始化 速度 加速度 位移
            for (var i:int = 0; i <= div; i ++)
            {
                //初始化运动后坐标
                pX[i] = 10 + (lenDiv * pm * i);
                pY[i] = 10;
                //初始化运动前的坐标
                oX[i] = 10 + (lenDiv * pm * i);
                oY[i] = 10;
                //初始化加速度
                aX[i] = 0;
                aY[i] = 0;
            }
            
            drawFish(fish_1, 10, 300, 300);
            drawFish(fish_2, 10, 100, 100);
            
            addChild(mS);
            addEventListener(Event.ENTER_FRAME, frame);
        }
        
        private function drawFish(fish:Sprite, size:int, $x:int, $y:int):void
        {
            fish.graphics.beginFill(0xFF0000);
            fish.graphics.drawCircle(0, 0, size);
            fish.graphics.endFill();
            addChild(fish);
            fish.x = $x;
            fish.y = $y;
            
            fish.addEventListener(MouseEvent.CLICK, fishClick);
        }
        
        private function fishClick(evt:MouseEvent):void
        {
            var fish:Sprite = evt.currentTarget as Sprite;
            fish.x = stage.mouseX;
            fish.y = stage.mouseY;
        }
        
        public function frame(evt:Event):void
        {
            //固定开始点
            
            //最后一个点跟随鼠标运动
            pX[pX.length - 1] = fish_2.x;
            pY[pY.length - 1]  = fish_2.y;
            //设置重力加速度
            accForces();
            verlet();
            
            for (var j:uint = 0; j <= div - 1; j ++)
            {                
                satConstraints();            
            }
            // Draw line
            mS.graphics.clear();            
            mS.graphics.lineStyle(1, 0x000000, 2);            
            mS.graphics.moveTo(0,0);           
            mS.graphics.drawCircle(cX, cY, cR);            
            mS.graphics.moveTo(0, 0);            
            mS.graphics.moveTo(pX[0], pY[0]);
            pX[0] = fish_1.x;
            pY[0] = fish_1.y;
            pX[pX.length - 1] = fish_2.x;
            pY[pY.length - 1]  = fish_2.y;
            //画圆或者 矩形
            for (var i:uint = 0; i <= div; i++)
            {                
                mS.graphics.lineTo(pX[i], pY[i]);
            }
        }
        public function verlet():void 
        {            
            for (var i:uint = 0; i <= div; i++) 
            {                
                var tempX:Number = pX[i];                
                pX[i] += (0.99*pX[i] - 0.99*oX[i]) + (aX[i] * pm * dt * dt);                
                var tempY:Number = pY[i];                
                pY[i] += (0.99*pY[i] - 0.99*oY[i]) + (aY[i] * pm * dt * dt);                
                oX[i] = tempX;                
                oY[i] = tempY;            
            }        
         }
        public function accForces():void 
        {            
            for (var i:uint = 1; i <= div; i++) 
            {                
                aY[i] = g;            
            }        
        }
        public function satConstraints():void 
        {            
            for (var i:uint = 1; i <= div; i++) 
            {                
                var dx:Number = (pX[i] - pX[i - 1]) / pm;                
                var dy:Number = (pY[i] - pY[i - 1]) / pm;                
                var d:Number = Math.sqrt((dx * dx) + (dy * dy));                
                var diff:Number = d - lenDiv;                
                pX[i] -= (dx / d) * 0.5 *pm* diff;                
                pY[i] -= (dy / d) * 0.5 *pm* diff;                
                pX[i - 1] += (dx / d) * 0.5 *pm* diff;                
                pY[i - 1] += (dy / d) * 0.5 *pm* diff;            
             }        
         }        
         public function checkColl():void 
         {            
             for (var i:uint = 0; i <= div; i++) 
             {                
                 var dx:Number = pX[i] - cX;                
                 var dy:Number = pY[i] - cY;                
                 var r:Number = Math.sqrt((dx * dx) + (dy * dy));                
                 //trace(r);                
                 var rr:Number = r-cR;                
                 if (rr < 0) 
                 {                    
                     // Collision                    
                     pX[i] += ( -dx / r) * rr;                    
                     pY[i] += ( -dy / r) * rr;                
                 }            
             }        
         }
    }
}