こんな感じ
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; } }