時計を作ってみたぉ

こんな感じ
http://about-hiroppy.com/flash/work/clock1/

そーす ファイル分割してないので見づらい><(wonderfl投稿のため)

package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.DisplayObject;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.geom.ColorTransform;
	import flash.geom.Matrix;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	import flash.utils.Timer;
	
	import caurina.transitions.Tweener;
	
	[SWF(width="500",height="500",backgroundColor="0")]
	
	public class clock3 extends Sprite
	{
		
		private var bmpd:BitmapData;
		private var off_bmpd:BitmapData;
		private var tf:TextField = new TextField();
		private var date1:Date = new Date();
		private var boxes:Vector.<Square> = new Vector.<Square>;
		private var N:int = 40;
		private var color_Array:Array = new Array(
			0xff0000,0xff4500,0xffa500,0xffd700,
			0x7cfc00,0x40e0d0,0x1e90ff,0x4169e1,
			0xff00ff,0xff1493
		);
		private var tff:TextField = new TextField();
		private var old_s:Number;
		private var circles:Vector.<Sprite> = new Vector.<Sprite>;
		private var time_cnt:Number = 0; //onEnterFrameの動作起動ふらぐ
		private var circles2:Vector.<Sprite> = new Vector.<Sprite>; //周りの円
		
		public function clock3()
		{
			//bitmapdata
			bmpd = new BitmapData(500,500,false,0);
			off_bmpd = new BitmapData(10,10,false,0);
//			addChild(new Bitmap(bmpd));
			
			//time
			tf.defaultTextFormat = new TextFormat(null,100);
			tf.autoSize = TextFieldAutoSize.LEFT;
			
			//時間の生成
			var hStr:String = date1.hours < 10 ? "0" + date1.hours.toString() : date1.hours.toString();            
			var mStr:String = date1.minutes < 10 ? "0" + date1.minutes.toString() : date1.minutes.toString();
			var sStr:String = date1.seconds < 10 ? "0" + date1.seconds.toString() : date1.seconds.toString();
			var tf1:TextField = new TextField();
			tf1.defaultTextFormat = new TextFormat(null,100);
			tf1.autoSize = TextFieldAutoSize.LEFT;
			tf1.text = hStr+":"+mStr+":"+sStr;
			tf1.textColor = 0x00ffff;
			bmpd.draw(tf1,new Matrix(1,0,0,1,(500-tf1.width)/2,(500-tf1.height)/2)); 	
			
			for(var xx:int=0;xx<bmpd.width;xx+=8){
				var cnt:int=0;
				for(var yy:int=0;yy<bmpd.height;yy+=8){
					if(bmpd.getPixel(xx,yy) != 0){
//						var ci:Circle = new Circle(bmpd.getPixel(xx,yy));
						var ci:Circle = new Circle(0x00ffff);
						circles.push(ci);
						Tweener.addTween(addChild(Random(ci,cnt%4)),{
							x:xx,
							y:yy,
							alpha:1,
							time:2.2,
							delay:1
						});
					}
					cnt++;
				}
			}
			
			//周りのやつ
			for(var i:int=0;i<N;i++){
				var c:Square = new Square(color_Array[i%10]);
				var c1:Circle = new Circle(0xff00ff+i*3000);
				boxes.push(c);
				circles2.push(c1);
			}
			
			//一番外
			for(i=0;i<N;i++){
				Tweener.addTween(addChild(Position(boxes[i])),{
					x:230*Math.cos(i*9*Math.PI/180)+240,
					y:230*Math.sin(i*9*Math.PI/180)+240,
					alpha:1,
					time:1.3,
					delay:0.5
				});
			}
			
			//二番目の外
			for(i=0;i<N;i++){
				Tweener.addTween(addChild(Position(circles2[i])),{
					x:190*Math.cos(i*9*Math.PI/180)+250,
					y:190*Math.sin(i*9*Math.PI/180)+250,
					alpha:1,
					time:1.8,
					delay:0.8,
					transition:"easeOutBounce"
				});
			}
			
			old_s = date1.seconds;
			addEventListener(Event.ENTER_FRAME,onEnterFrame);
			var timer:Timer = new Timer(1000);
			timer.start();
			timer.addEventListener(TimerEvent.TIMER,onTimerEvent);
			addChild(new Bitmap(off_bmpd));
		}
		
		private function onEnterFrame(e:Event):void{
			var date:Date = new Date();
			if(old_s != date.seconds && time_cnt > 2){
				var hStr:String = date.hours < 10 ? "0" + date.hours.toString() : date.hours.toString();            
				var mStr:String = date.minutes < 10 ? "0" + date.minutes.toString() : date.minutes.toString();
				var sStr:String = date.seconds < 10 ? "0" + date.seconds.toString() : date.seconds.toString();
				tf.text = hStr+":"+mStr+":"+sStr;
				tf.textColor = 0x00ffff;
				bmpd.fillRect(bmpd.rect,0); 
				bmpd.draw(tf,new Matrix(1,0,0,1,(500-tf.width)/2,(500-tf.height)/2)); 	
				var cnt:Number=0;
				var ran_cnt:int=0;
				var ran:Array = new Array();
				ran = randomList(N);
				for(var i:int=0;i<bmpd.width;i+=8){
					for(var j:int=0;j<bmpd.height;j+=8){
						if(bmpd.getPixel(i,j) != 0){
							//不足分の追加
							if(circles.length <= cnt){
//								var c:Circle = new Circle(bmpd.getPixel(i,j));
								var c:Circle = new Circle(0x00ffff);
								var xx:Number = circles2[ran[ran_cnt]].x;
								var yy:Number = circles2[ran[ran_cnt]].y;
								c.x = xx;
								c.y = yy;
								c.return_check = true;
								c.position(xx,yy); //移動前のポジションを保持
								circles2[ran[ran_cnt]].alpha = 0.2;
								c.alpha = 1;
								circles.push(c);
								addChild(c); 
								ran_cnt++;
							}
							if(circles.length > cnt){
								circles[cnt].return_check = false;
								Tweener.addTween(circles[cnt],{
									x:i,
									y:j,
									alpha:1,
									time:0.5
								});
								cnt++;
							}
						}
					}
				}
				if(cnt < circles.length){
					for(i=cnt;i<circles.length;i++){
						circles[i].return_check = true;
						Tweener.addTween(circles[i],{
							x:circles[i].px,
							y:circles[i].py,
							time:0.2
						});
					}
					change_Color();
//					for(i=cnt;i<circles.length;i++){
////						circles[i].graphics.clear();
//					}
					circles.splice(cnt,circles.length-cnt);
				}
			}
			old_s = date.seconds;
		}
		
		private function onTimerEvent(e:TimerEvent):void{
			time_cnt++;
			for(var i:int=0;i<N;i++){
				var px:Number;
				var py:Number;
				if(i == N-1){
					px = boxes[0].x;
					py = boxes[0].y;
				}
				else{
					px = boxes[i+1].x;
					py = boxes[i+1].y;
				}
				Tweener.addTween(now_Position(boxes[i]),{
					x:px,
					y:py,
					time:1
				});
			}
		}
		// 重複なしにランダム取得
		private function randomList(max:Number):Array{
			var inList:Array = new Array;
			var outList:Array = new Array;
			var j:int = 0;
			var rndValue:int;
			for (var i:int=0; i<max; i++) inList[i] = i;
			var inListL:int = inList.length;
			while (inListL){
				rndValue = Math.floor( Math.random() * (max-j) );
				outList[j] = inList.splice( rndValue, 1 );
				j++;
				inListL = inList.length;
			}
			return outList;
		}

		private function change_Color():void{
			var ctf:ColorTransform = new ColorTransform();
			for(var i:int=0;i<circles.length;i++){
				if(circles[i].return_check){
				ctf.color = Math.random()*0xffffff;
				circles[i].transform.colorTransform = ctf;
				}
			}
		}
		
		private function Random(e:DisplayObject,num:int):DisplayObject{
			e.alpha = 0;
			if(num == 0) e.x=0,e.y=0;
			if(num == 1) e.x=500,e.y=0;
			if(num == 2) e.x=0,e.y=500;
			if(num == 3) e.x=500,e.y=500;
			return e;
		}
		
		private function Position(e:DisplayObject):DisplayObject{
			e.alpha = 0;
			e.x = 250,e.y=250;
			return e;
		}
		
		private function now_Position(e:DisplayObject):DisplayObject{
			return e;	
		}
	}
}

import flash.display.Sprite;
import flash.filters.GlowFilter;

class Square extends Sprite{
	public function Square(color){
		graphics.lineStyle(1,0xffffff);
		//		graphics.beginFill(Math.random()*0xffffff);
		graphics.drawRect(0,0,20,20);
		//		graphics.endFill();
		filters = [new GlowFilter(color,1,8,8,6,2)];
	}
}

class Circle extends Sprite{
	public var px:Number;
	public var py:Number;
	public var return_check:Boolean;
	
	public function Circle(color){
		graphics.beginFill(color,0.8);
		graphics.drawCircle(0,0,5);
		graphics.endFill();
	}
	public function position(xx:Number,yy:Number):void{
		this.px = xx;
		this.py = yy;
	}
}