flash on 2010-1-20

by nausicaa
♥0 | Line 72 | Modified 2010-01-20 13:30:35 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Sprite;
    import flash.events.Event;
    
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    
    public class BallFollowMouse extends Sprite {
        private var ballCount:uint = 50;
        private var speed:Number = 0.2;
        public function BallFollowMouse() {
        		
        		var _txt:TextField=new TextField();
        		addChild(_txt);
        		_txt.autoSize=TextFieldAutoSize.LEFT;
        		_txt.text=new BallEvent(BallEvent.FOLLOW,0,1,2).toString();
        	
            for(var i:uint=0;i<ballCount;i++){
            		addChild(new Ball(this,200));
            }
            addEventListener(Event.ENTER_FRAME,followMouse);
        }
        private function followMouse(eventObject:Event):void{
        		dispatchEvent(new BallEvent(BallEvent.FOLLOW,mouseX,mouseY,speed));
        }
    }
}

import flash.display.Sprite;
import flash.display.Graphics;
import flash.events.Event;

class Ball extends Sprite{
	private const deceleration:Number = 0.5;
	private var angle:Number;
	private var radius:Number;
	private var sizeRate:Number = 0.1;
	
	public function Ball(timeline:Sprite,maxRadius:Number){
		var randomRate:Number = Math.random();
		angle = 2*Math.PI*Math.random();
		radius = maxRadius*randomRate;
		createBall(randomRate);
		timeline.addEventListener(BallEvent.FOLLOW, follow);
	}
	private function createBall(randomRate:Number):void{
		var myGraphics:Graphics = graphics;
		myGraphics.beginFill(Math.floor(0xffffff*randomRate)+1);
		myGraphics.drawCircle(0,0,radius*sizeRate);
		alpha = 1-randomRate;
	}
	private function follow(eventObject:BallEvent):void{
		var randomRate:Number=Math.random();
		angle += eventObject.speed;
		angle%=Math.PI*2;
		var nX:Number=eventObject.targetX+radius*Math.cos(angle);
		var nY:Number=eventObject.targetY+radius*Math.sin(angle);
		x += (nX-x)*deceleration*randomRate;
		y += (nY-y)*deceleration*randomRate;
	}
}
class BallEvent extends Event{
	public static const FOLLOW:String = "follow"
	//private var _targetX:Number;
	public var targetX:Number;
	//private var _targetY:Number;
	public var targetY:Number;
	//private var _speed:Number;
	public var speed:Number;
	
	/*public function get targetX():Number{
		return _targetX;
	}
	public function get targetY():Number{
		return _targetY;
	}
	public function get speed():Number{
		return _speed;
	}*/
	public function BallEvent(event_str:String, myTargetX:Number, myTargetY:Number, mySpeed:Number) {
		super(event_str)
		//_targetX = myTargetX;
		targetX=myTargetX;
		//_targetY = myTargetY;
		targetY=myTargetY;
		//_speed = mySpeed;
		speed=mySpeed;
	}
	public override function clone():Event{
		return new BallEvent(type, targetX, targetY, speed);
	}
	public override function toString():String{
		return formatToString("BallEvent", "type", "bubbles", "cancelable", "eventPhase", "targetX", "targetY", "speed");
	}
}