forked from: クリスマスリース的な何か

by demouth forked from クリスマスリース的な何か (diff: 209)
♥2 | Line 117 | Modified 2009-12-20 14:44:50 | MIT License
play

ActionScript3 source code

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

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="this.init()" layout="absolute" clipContent="false" frameRate="60">
	<mx:Script>
		<![CDATA[
			// forked from demouth's クリスマスリース的な何か
			import flash.display.*;
			import flash.events.Event;
			import flash.geom.*;
			import mx.controls.Alert;
			
			public var pc:Vector.<Object> = new Vector.<Object>();
			public var bitmap:Bitmap = new Bitmap(new BitmapData(465, 465 , true , 0xFFFFFFFF));
			
			private function init(event:Event = null):void
			{
				
				this.uic.addChild(this.bitmap);
				
				this.addEventListener(Event.ENTER_FRAME , enterFrameHandler);
				
			}
			
			private function enterFrameHandler(e:Event):void 
			{
				
				this.deletePc();
				this.createPc();
				this.movePc();
				this.rendering(this.uic.graphics);
				this.draw(this.getMatrix(0));
				//this.draw(this.getMatrix(Math.PI));
				//this.draw(this.getMatrix(Math.PI / 2));
				//this.draw(this.getMatrix(Math.PI / 2 + Math.PI));
				
			}
			
			private function draw(matrix:Matrix):void
			{
				this.bitmap.bitmapData.draw(this.uic , matrix);
			}
			
			private function getMatrix(rotate:Number):Matrix
			{
				var mat:Matrix = new Matrix();
				mat.translate(-232, -232);
				mat.rotate(rotate);
				mat.translate(232, 232);
				return mat;
			}
			
			private function rendering(g:Graphics):void
			{
				var g:Graphics = g;
				g.clear();
				
				var l:int = this.pc.length - 1;
				var i:int = 0;
				for (i = 0; i < l; i++) 
				{
					var p:Object = this.pc[i];
					var radius:Number = ( Math.abs(p.sx) + Math.abs(p.sy) ) * 1 ;
					
					g.beginFill(0x660033 , 1);
					g.drawCircle(p.x , p.y , radius + 1 );
					g.endFill();
					g.beginFill(0x009966 , 1);
					g.drawCircle(p.x , p.y , radius );
					g.endFill();
				}
			}
			
			private function movePc():void
			{
				var l:int = this.pc.length - 1;
				var i:int = 0;
				for (i = 0; i < l; i++) 
				{
					var p:Object = this.pc[i];
					p.sx += p.ax;
					p.sy += p.ay;
					p.ax = 0;
					p.ay = 0;
					p.x += p.sx;
					p.y += p.sy;
					p.sx *= 0.9;
					p.sy *= 0.9;
					
					if (
						(Math.abs(p.sx) < 0.5)
						&&
						(Math.abs(p.sy) < 0.5)
					)
					{
						p.end = true;
					}
				}
			}
			
			private function createPc():void
			{
				var l:int = this.numPc.value;
				var i:int = 0;
				for (i = this.pc.length; i < l; i++) 
				{
					var p:Object = {};
					
					var pow:Number = Math.random() * 10;
					var angle:Number = Math.PI * 2 * Math.random();
					var x:Number = Math.sin(angle) * pow;
					var y:Number = Math.cos(angle) * pow;
					
					p.x = this.stage.mouseX;
					p.y = this.stage.mouseY;
					p.ax = x;
					p.ay = y;
					p.sx = 0;
					p.sy = 0;
					
					p.end = false;
					this.pc.push(p);
				}
			}
			
			private function deletePc():void
			{
				var l:int = this.pc.length - 1;
				var i:int = 0;
				for (i = l; i >= 0; i--) 
				{
					var p:Object = this.pc[i];
					if (p.end)
					{
						this.pc.splice(i, 1);
						p = null;
					}
				}
			}
		]]>
	</mx:Script>
	<mx:UIComponent id="uic" /><mx:HSlider id="numPc" value="200" maximum="1000" snapInterval="1" />
</mx:Application>