flash on 2010-7-27

by pon
♥0 | Line 128 | Modified 2010-07-30 21:32:03 | MIT License
play

ActionScript3 source code

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

package {
    import flash.geom.Point;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.Sprite;
    import flash.display.StageScaleMode
    import flash.display.StageAlign
    import flash.display.StageQuality
    public class FlashTest extends Sprite {
        private const G:Number=0.6;
        private const M:Number=0.99;
        private const V:Number=-0.8;
        private const R:Number=6;
        
        private var list:Array=[];
        private var focus:Ball=null
        
        public function FlashTest() {
            // write as3 code here..
            stage.quality=StageQuality.LOW;
            stage.scaleMode=StageScaleMode.NO_SCALE
            stage.align=StageAlign.TOP_LEFT
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN,creat);
            stage.addEventListener(MouseEvent.MOUSE_UP,release);
            addEventListener(Event.ENTER_FRAME,enter);
        }
        private function creat(e:MouseEvent):void{
            if(e.target!=e.currentTarget)return
            focus=new Ball()
            list.push(focus);
            addChild(focus)
        }
        private function release(e:MouseEvent):void{
            focus.active();
            focus=null;
        }
        private function enter(e:Event):void{
            var ball:Ball
            for(var i:uint=0;i<list.length;i++){
                ball=list[i]
                if(!ball._active)continue
                ball.x+=(ball.vx*=M);
                ball.y+=(ball.vy*=M);
                ball.vy+=G;
                if(ball.y>=stage.stageHeight-ball.r){
                    ball.y=stage.stageHeight-ball.r
                    ball.vy*=V
                }

                if(ball.x<=ball.r){
                    ball.x=ball.r
                    ball.vx*=V
                }else if(ball.x>=stage.stageWidth-ball.r){
                    ball.x=stage.stageWidth-ball.r
                    ball.vx*=V
                }
                ball.rotation+=ball.vx;
                ball.rotation+=ball.vy;
                ball.point.x=ball.x
                ball.point.y=ball.y
            }
            var _x:int
            var _y:int
            for(i=0;i<list.length;i++){
                var kou:Ball=list[i]
                for(var n:uint=i+1;n<list.length;n++){
                    var otu:Ball=list[n];
                    var sa:Number=(kou.r+otu.r)-Point.distance(kou.point,otu.point)
                    if(sa>0){
                        _x=kou.x>otu.x?1:-1;
                        _y=kou.y>otu.y?1:-1;

                        kou.x+=sa/R*_x;
                        kou.vx+=sa/R*_x;
                        otu.x-=sa/R*_x;
                        otu.vx-=sa/R*_x;
                        kou.y+=sa/R*_y;
                        kou.vy+=sa/R*_y;
                        otu.y-=sa/R*_y;
                        otu.vy-=sa/R*_y;
                        
                    }
                }
            }
        }
    }
}
import flash.events.MouseEvent;
import flash.geom.Point;
import flash.events.Event;
import flash.display.Sprite;

class Ball extends Sprite{
    public var vx:Number=0;
    public var vy:Number=0;
    public var r:Number
    public var point:Point=new Point();
    public var _active:Boolean=false
    
    public function Ball(){
        graphics.beginFill(0x000000,1);
        graphics.drawCircle(0,0,100);
        graphics.beginFill(0xFFFFFF,1);
        graphics.drawRoundRect(-40,-70,20,20,4,4);
        graphics.drawRoundRect(20,-70,20,20,4,4);
        scaleX=scaleY=0.1
        addEventListener(Event.ENTER_FRAME,size);
    }
    private var pl:Number=0.05;
    private function size(e:Event):void{
       scaleX += pl;
       scaleY += pl;
       if(scaleX>=2 || scaleX<=0.1)pl*=-1
       vx=(root.stage.mouseX-x)/5
       vy=(root.stage.mouseY-y)/5
       r=scaleX*100;
       
       x=root.stage.mouseX;
       y=root.stage.mouseY;
    }

    public function active():void{
        removeEventListener(Event.ENTER_FRAME,size);
        r=scaleX*100;
        addEventListener(MouseEvent.MOUSE_DOWN,down)
        _active=true
    }
    private function down(e:MouseEvent):void{
        _active=false
        startDrag()
        stage.addEventListener(MouseEvent.MOUSE_UP,up)
    }
    private function up(e:MouseEvent):void{
        _active=true
        stage.removeEventListener(MouseEvent.MOUSE_UP,up)
        stopDrag()
    }


}