package{ import flash.display.Sprite; import flash.utils.Timer; import flash.events.TimerEvent; import flash.display.*; import flash.text.*; public class Sample04 extends Sprite{ private var base: Sprite; private var timer: Timer; private var hourTF: Array; private var minuteTF: Array; private var secondTF: Array; private var hourX: Array, hourY: Array, hourZ: Array, hourSize: Array; private var minuteX: Array, minuteY: Array, minuteZ: Array, minuteSize: Array; private var secondX: Array, secondY: Array, secondZ: Array, secondSize: Array; private const hankei: Number = 200; private const screenZ: Number = 400; private const centerZ: Number = 650; function Sample04() { base = new Sprite(); base.x = 200; base.y = 200; addChild(base); hourTF = new Array(); hourX = new Array(); hourY = new Array(); hourZ = new Array(); hourSize = new Array(); for (var i:Number = 0; i < 24; i++) { hourTF.push(getTimeFieldSymbol(i)); base.addChild(hourTF[hourTF.length-1]); hourX.push(-200); hourY.push(0); hourZ.push(0); hourSize.push(1); } minuteTF = new Array(); minuteX = new Array(); minuteY = new Array(); minuteZ = new Array(); minuteSize = new Array(); for (i = 0; i < 60; i++) { minuteTF.push(getTimeFieldSymbol(i)); base.addChild(minuteTF[minuteTF.length-1]); minuteX.push(-50); minuteY.push(-50); minuteZ.push(0); minuteSize.push(1); } secondTF = new Array(); secondX = new Array(); secondY = new Array(); secondZ = new Array(); secondSize = new Array(); for (i = 0; i < 60; i++) { secondTF.push(getTimeFieldSymbol(i)); base.addChild(secondTF[secondTF.length-1]); secondX.push(200); secondY.push(0); secondZ.push(0); secondSize.push(1); } timer = new Timer(1000/30); timer.addEventListener(TimerEvent.TIMER, loop); timer.start(); } private function getTimeFieldSymbol(n:Number): TextField { var field: TextField = new TextField(); field.text = "" + n; if (n < 10) field.text = "0"+ n; else field.text = "" + n; field.autoSize = TextFieldAutoSize.CENTER; addChild(field); return field; } private function showData(data:Number, num:Number, fieldsX:Array, fieldsY:Array, fieldsZ:Array, fieldsSize:Array, fieldsTF:Array):void { for (var i:Number = 0; i < num; i++) { var theAngle:Number = (-data/num*Math.PI*2 + i/num*Math.PI*2); var theY:Number = hankei*Math.sin(theAngle); var theZ:Number = centerZ - hankei*Math.cos(theAngle); fieldsY[i] += (theY - fieldsY[i])/4; fieldsZ[i] += (theZ - fieldsZ[i])/4; if(i == data) fieldsSize[i] += (4 - fieldsSize[i])/4; else fieldsSize[i] += (1 - fieldsSize[i])/4; fieldsTF[i].x = fieldsX[i]*screenZ/fieldsZ[i]; fieldsTF[i].y = fieldsY[i]*screenZ/fieldsZ[i]; if (i == data) { fieldsTF[i].x -= 20; fieldsTF[i].y -= 20; } fieldsTF[i].scaleX = fieldsSize[i]*screenZ/fieldsZ[i]; fieldsTF[i].scaleY = fieldsSize[i]*screenZ/fieldsZ[i]; } } private function loop(event:TimerEvent):void { var date:Date = new Date(); showData(date.getHours(), 24, hourX, hourY, hourZ, hourSize, hourTF); showData(date.getMinutes(), 60, minuteX, minuteY, minuteZ, minuteSize, minuteTF); showData(date.getSeconds(), 60, secondX, secondY, secondZ, secondSize, secondTF); } } }