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

ライン

各点がそれぞれの一つ前の点を万有引力もどきの法則で追いかける。
MAX_SPEEDの値を大きく(10以上)するとライン系のスクリーンセーバーっぽく見えなくもない。
83行目あたりの colorTransform のアルファのオフセットを0にしても楽しい。
Get Adobe Flash player
by cda244 19 Feb 2009
/*
	各点がそれぞれの一つ前の点を万有引力もどきの法則で追いかける。
	MAX_SPEEDの値を大きく(10以上)するとライン系のスクリーンセーバーっぽく見えなくもない。
	83行目あたりの colorTransform のアルファのオフセットを0にしても楽しい。
*/ 
package
{
	
	import flash.display.MovieClip;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.events.Event;
	import flash.geom.Point;
	import flash.geom.ColorTransform;

	[SWF(width="400", height="400", backgroundColor="0x000000", frameRate="30")]
	
	public class Index extends MovieClip
	{
		private const PI:Number = Math.PI;
		private const NUM:uint=100;
		private const MAX_SPEED:uint=4;
		private var ptArray:Array=[];	//各点
		private var tgtArray:Array=[];	//各ターゲット
		private var radArray:Array=[];	//各点のターゲットとの角度
		private var spArray:Array=[];	//各点の速度、2次元配列
		private var org_mc:MovieClip = new MovieClip();
		private var bmpDat:BitmapData = new BitmapData(400, 400, false, 0x000000);
		private var bmp:Bitmap = new Bitmap(bmpDat);
		
		public function Index():void
		{
			//最初の点
			ptArray.push( new Point(200, 0)	);
			mcInit( new Point(200, 200) );
														 
			//以降の点
			for(var i:uint=1; i<NUM; i++){
				ptArray.push( new Point(200, 0)	);
				mcInit( ptArray[i-1] );
			}
			
			addChild(bmp);
			addEventListener(Event.ENTER_FRAME, mv);
		}

		
		private function mcInit(tgt:Object):void
		{
			tgtArray.push( tgt );
			radArray.push(0);
			spArray.push( [0, 0] );
		}

		
		private function mv(evt:Event):void
		{
			org_mc.graphics.clear();
			org_mc.graphics.lineStyle(1, 0xFFFFFF, 0.2);
			
			org_mc.graphics.moveTo(ptArray[0].x, ptArray[0].y);
			for(var i:uint=0; i<NUM; i++){
				radArray[i] = Math.atan2( tgtArray[i].y-ptArray[i].y, tgtArray[i].x-ptArray[i].x );
				
				var dd:Number = (tgtArray[i].y-ptArray[i].y)*(tgtArray[i].y-ptArray[i].y) + (tgtArray[i].x-ptArray[i].x)*(tgtArray[i].x-ptArray[i].x);
				if(dd<1){	dd = 1;	}
				else if(dd > 2){	dd = 2;	}
				
				spArray[i][0] += Math.cos( radArray[i] ) / dd;
				spArray[i][1] += Math.sin( radArray[i] ) / dd;
			
				if(spArray[i][0] > MAX_SPEED){	spArray[i][0] = MAX_SPEED;	}
				else if(spArray[i][0] < -MAX_SPEED){	spArray[i][0] = -MAX_SPEED;	}
			
				if(spArray[i][1] > MAX_SPEED){	spArray[i][1] = MAX_SPEED;	}
				else if(spArray[i][1] < -MAX_SPEED){	spArray[i][1] = -MAX_SPEED;	}
			
				ptArray[i].x += spArray[i][0];
				ptArray[i].y += spArray[i][1];

				org_mc.graphics.lineTo(ptArray[i].x, ptArray[i].y);
			}
			bmpDat.colorTransform( bmpDat.rect, new ColorTransform(1, 1, 1, 1, -5, -1, 0, -1) );
			bmpDat.draw(org_mc);
		}
		
	}
	
}