forked from: spring02

by hacker_aft9cz2z forked from spring02 (diff: 79)
研究室内勉強会: バネその2
♥0 | Line 112 | Modified 2011-02-20 15:10:57 | MIT License
play

ActionScript3 source code

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

// forked from sakef's spring02
/*
    研究室内勉強会: バネその2
*/
package
{
    import flash.display.Sprite;
    import flash.events.Event;
    
    [SWF(width="465", height="465", backgroundColor="0x000000", frameRate="30")]
    public class bane02 extends Sprite
    {
        private var ary:Array;
        
        public function bane02()
        {
            ary=[];
            
            var ball:BaneBall;
            for(var i:int=0; i < 10; i++)
            {
                var x:Number= 40 * i + 40;
                var y:Number=stage.stageHeight/2;
                ball=new BaneBall(x,y);
                ball.x=x;
                ball.y=y;
                addChild(ball);
                ary.push(ball);
            }
            
            for(var i:int=0; i < 10; i++)
            {
                var x:Number= 40 * i + 40;
                var y:Number=stage.stageHeight/2 + 40;
                ball=new BaneBall(x,y);
                ball.x=x;
                ball.y=y;
                addChild(ball);
                ary.push(ball);
            }
            
            for(var i:int=0; i < 10; i++)
            {
                var x:Number= 40 * i + 40;
                var y:Number=stage.stageHeight/2 - 40;
                ball=new BaneBall(x,y);
                ball.x=x;
                ball.y=y;
                addChild(ball);
                ary.push(ball);
            }
            addEventListener(Event.ENTER_FRAME, onFrame);
        }
        
        private function onFrame(e:Event):void
        {
            for(var i:int=0; i < ary.length; i++) (ary[i]as BaneBall).update();
        }
    }
}


import flash.display.Shape;
import flash.utils.*;

class BaneBall extends Shape
{
    private var tx:Number;
    private var ty:Number;
    private var vx:Number;
    private var vy:Number;
    private var k:Number;
    private var f:Number
    private var limit:Number=150;
    private var rx:Number = Math.random()*200+200;
    private var ry:Number = Math.random()*300+200;
    private var mass:Number = Math.random()*0.5 + 0.5;
    
    public function BaneBall(xx:Number, yy:Number)
    {
        tx=xx;
        ty=yy;
        k=0.035;//0.04 + 0.02 * Math.random();
        f=0.75;//0.8 + 0.15 * Math.random();
        vx=vy=0;
        
        graphics.beginFill(0x00ffff * Math.random(), 1);
        graphics.drawCircle(0, 0, 5);
        graphics.endFill();
    }
    
    public function update():void
    {
        //vx+=(stage.mouseX - x) * k;
        //vy+=(stage.mouseY - y) * k;
        
        var xx:Number = x - stage.mouseX;
        var yy:Number = y - stage.mouseY;
        var dist:Number = Math.sqrt( xx * xx + yy * yy );
        
        if(dist < limit)
        {
           var angle:Number = Math.atan2(xx,yy);
           if(xx <= 0 && yy <= 0)
           {
               vx += Math.cos(angle)*(1-(dist/limit))*(5/mass);
               vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
           }
           else if(xx > 0 && yy < 0)
           {
               vx -= Math.cos(angle)*(1-(dist/limit))*(5/mass);
               vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
           }
           else if(xx < 0 && yy > 0)
           {
               vx -= Math.cos(angle)*(1-(dist/limit))*(5/mass);
               vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
           }
           else if(xx >= 0 && yy >= 0)
           {
               vx += Math.cos(angle)*(1-(dist/limit))*(5/mass);
               vy += Math.cos(angle)*(1-(dist/limit))*(5/mass);
           }
            
        }
        
        
        vx+=(tx - x) * k;
        vy+=(ty - y) * k;
        
        x+=vx + Math.sin(getTimer()/rx)*0.5;
        y+=vy + Math.cos(getTimer()/ry)*0.5;
        
        vx*=f;
        vy*=f;
    }
}