Beautifl - Flash Gallery

Thumbnail : forked from: level0_CircleChainClock!
forked from: level0_CircleChainClock!
Murai 2009-08-31 MIT License

再生するにはFlash Playerが必要です。デスクトップのブラウザでご覧ください。

// forked from Murai's level0_CircleChainClock!
// forked from 9re's forked from: Steiner Chain version 1
// forked from paq's 超超超シンプル時計。

package {
	import flash.display.*;
	import flash.utils.*;
	import flash.events.*;
	import flash.text.*;
	import flash.geom.*;
	import flash.filters.*;
	/*
		@author Takashi Murai(KAYAC)
	*/

	[SWF(width="465",height="465",backgroundColor="0xFFFFFF",frameRate="60")];
	public class CircleChainClock extends Sprite {
		private var font:Class;
		public var textField:TextField = new TextField();
		public var date:Date;
		public var str:String = new String();

		private var _scale:Number = 75;
		private var _cx:Number;
		private var _cy:Number;

		private var Canvas:Sprite=new Sprite();
		private var Hs:Sprite=new Sprite();
		private var Ms:Sprite=new Sprite();
		private var Ss:Sprite=new Sprite();
		private var MSs:Sprite=new Sprite();
		private var _bmd:BitmapData;

		private static  const P:Point = new Point();
		private static  const BLUR:BitmapFilter = new BlurFilter( 16, 16, 1 );
		private static  const ALPHA:ColorTransform= new ColorTransform( 1, 1, 1, 0.85, 0, 0, 0, 0 );

		public function CircleChainClock() {

			_bmd= new BitmapData( 465, 465, true, 0x00000000 );
			addChild( new Bitmap(_bmd ) );

			var format:TextFormat = new TextFormat();
			format.font = "_sans";
			format.align="center";
			format.size = 20;
			format.color = 0x000000;
			//
			textField.defaultTextFormat = format;
			textField.text=" ";
			textField.x = 0;
			textField.y = 465/2-textField.textHeight/2;
			textField.width = 465;
			
			Hs.alpha=0.25;
			Ms.alpha=0.25;
			Ss.alpha=0.75;
			MSs.alpha=0.25
			;
			Canvas.addChild(Hs);
			Canvas.addChild(Ms);
			Canvas.addChild(Ss);
			Canvas.addChild(MSs);
			Canvas.addChild(textField);
			addChild(Canvas);
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
		}
		
		public function drawSteiner(n:int,sp:Sprite,nR:Number):void {
    
                        sp.graphics.clear();
                        if(n<3)return
                        
			var r:Number = nR;
			var X:Number = ((new Date().seconds-1)*1000+new Date().milliseconds)/60000;
			var Y:Number = ((new Date().seconds-1)*1000+new Date().milliseconds)/60000;
			var t:Number = Math.PI / n;
			var rho:Number = r * Math.sin(t) / (1 - Math.sin(t));
			t = 2 * t;
			var s:Number;

			_cx = stage.stageWidth / 2;
			_cy = stage.stageHeight / 2;


			for (var i:int = 0; i < n; ++i) {
				s = i * t + Math.PI / 2;
				sp.graphics.beginFill(0x00000);
				draw(X + (r + rho) * Math.cos(s), Y + (r + rho) * Math.sin(s), rho,sp);
				sp.graphics.endFill();
			}
		}

		public function draw(cx:Number, cy:Number, cr:Number, sp:Sprite):void {
			var c:Number = cx * cx + cy * cy - cr * cr;
			var rx:Number, ry:Number, rr:Number;
			rx = cx / c * _scale + _cx;
			ry = -cy / c * _scale + _cy;
			rr = cr / c * _scale;

			sp.graphics.drawCircle(rx, ry, rr);
		}
		
		private function glower():void {
			_bmd.applyFilter( _bmd, _bmd.rect, P, BLUR );
			_bmd.colorTransform( _bmd.rect, ALPHA );
			_bmd.draw( Canvas );
		}
		
		private function onEnterFrame(e:Event):void {
			date = new Date();
			str ="";
			str += (date.hours < 10 ? "0" : "") + date.hours;
			str += " ";
			str += (date.minutes < 10 ? "0" : "") + date.minutes;
			str += " ";
			str += (date.seconds < 10 ? "0" : "") + date.seconds;
			textField.text = str;


			glower();
			drawSteiner(date.hours,Hs,1);
			drawSteiner(date.minutes,Ms,0.8);
			drawSteiner(date.seconds,Ss,0.5);
			drawSteiner(date.milliseconds/3,MSs,0.5);
		}
	}
}