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

forked from: Mouse Trailer たくさんのラインがマウスを追いかけるよ

画面をクリックするとリセットします
// forked from enoeno's Mouse Trailer たくさんのラインがマウスを追いかけるよ
/*
 画面をクリックするとリセットします
*/

package {
	
	import flash.display.*;
	import flash.geom.*;
	import flash.events.*;
	
	public class Spiral extends MovieClip {
		
		private var WIDTH:Number;
		private var HEIGHT:Number;
		
		private var MAX_LINE:Number = 40;
		private var _particles:Array;
		
		private var _screen:BitmapData;
		private var _canvas:MovieClip;
		
		public function Spiral():void {
			init();
		}
		
		private function init():void {
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;
			
			WIDTH = stage.stageWidth;
			HEIGHT = stage.stageHeight;

			_screen = new BitmapData( WIDTH, HEIGHT, false, 0x0 );
			this.addChild( new Bitmap( _screen ) ) as Bitmap;
		
			stage.addEventListener( Event.ENTER_FRAME, enterframeHandler );
			stage.addEventListener( MouseEvent.CLICK, reset );
			stage.addEventListener( Event.RESIZE, resize );
			reset();
		}
		
		private function reset( e:Event = null ):void {
			_particles = [];
			_screen.fillRect( _screen.rect, 0x0 );
			
			var i:int = MAX_LINE;
			while( i-- ) createParticle(i);
		}
		
		private function resize( e:Event = null ){
			stage.removeEventListener( Event.ENTER_FRAME, enterframeHandler );
			stage.removeEventListener( MouseEvent.CLICK, reset );
			stage.removeEventListener( Event.RESIZE, resize );
			init();
		}
		
		private function createParticle(ID):void {
			var p:Particle = new Particle();
			
			p.inertia = 0.85- ID*0.01;
			
			var colB = Math.floor( Math.random()*128 + 128 );
			var colG = Math.floor( Math.random()*( colB * 0.5 ) + colB * 0.105 );
			var colR = Math.floor( Math.random()*( colG * 0.5 ) + colG * 0.105 );
			
			var color = "0x"+ colR.toString(16) + colG.toString(16) + colB.toString(16);
			
			p.col = color;
			
			_particles.push( p );
		}
		
		private function enterframeHandler( e:Event = null ):void {
			update();			
		}
		
		private function update():void {
			
			_canvas = new MovieClip();
			
			stage.addChild( _canvas );
			
			
			var i:int = _particles.length;
			while( i -- ){
				var p:Particle = _particles[i];
				
				var sp:Sprite = new Sprite();
				_canvas.addChild( sp );
				
				sp.graphics.lineStyle( 0, p.col, 0.4 );				
				sp.graphics.moveTo( p.oldx, p.oldy );

				p.difx = p.difx*p.inertia+( stage.mouseX - p.oldx )*p.k;
				p.dify = p.dify*p.inertia+( stage.mouseY - p.oldy )*p.k;
				
				// 現在の座標から、ばねの力のだけ移動
				p.newx += p.difx;
				p.newy += p.dify;

				sp.graphics.lineTo( p.newx, p.newy );
				
				p.oldx = p.newx;
				p.oldy = p.newy;
				
			}
			
			capture();
			
			_canvas.removeChild( sp );
			stage.removeChild( _canvas );
			_canvas = null;
			
			
		}
		
		private function capture():void {
			var matrix : Matrix = new Matrix(1,0,0,1,0,0);
			var color : ColorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);
			var rect : Rectangle = new Rectangle(0, 0, WIDTH, HEIGHT);
			_screen.draw(_canvas, matrix, color, BlendMode.ADD, rect, true);
		}

	}
	
}


class Particle {
	public var oldx:Number;
	public var oldy:Number;
	
	public var newx:Number;
	public var newy:Number;
	
	public var difx:Number;
	public var dify:Number;
	
	public var inertia:Number;
	public var k:Number;
	public var col:uint;
	
	public function Particle() {
		
		this.oldx = 0;
		this.oldy = 0;
		
		this.newx = 0;
		this.newy = 0;
		
		this.difx = 0;
		this.dify = 0;
		
		this.inertia = 0;
		this.k = 0.05;
		
		this.col = 0xFFFFFF;
	}
}