class Clock{
private var R:Number=80;//Radious-別にprivateにする意味は全くないんですが、気分の問題です。
private var x_size:Number=240;//書き出し時のサイズ
private var y_size:Number=160;
private var dialPlate:MovieClip;
private var hands:MovieClip;
private var PI:Number=Math.PI;//単なる別名
function Clock(){//コンストラクタ。
var t = this;
dialPlate=_root.createEmptyMovieClip('dP',100);//文字盤
hands=_root.createEmptyMovieClip('h',200);//針-実はここで定義する意味はなかった
dialPlate._x=x_size/2;
dialPlate._y=y_size/2;
setDialPlate(dialPlate);
var intervalID:Number=setInterval(this,'redraw',500);
}
public function setDialPlate(mc:MovieClip):Void{//文字盤を作る。
mc._visible=false;
var texts:Array=new Array();
var tf:TextFormat=new TextFormat('_sans',15,0x000000,false,false,false);
for(var i:Number=1;i<13;i++){
texts[i]=mc.createTextField(''+i,10+i,0,0,30,30);
texts[i]._x=R*0.7*Math.sin(i*PI/6)-((i>9)?10:6);
texts[i]._y=-R*0.7*Math.cos(i*PI/6)-10;
texts[i].setNewTextFormat(tf);
texts[i].text=''+i;
}
mc.beginFill(0xcc9966,100);//茶色の塗り色
mc.lineStyle(5,0x333333,100);//灰色の線色
mc.moveTo(0.9*R*Math.cos(0),0.9*R*Math.sin(0));
var cos_N:Number=1/Math.cos(PI/8);
for(var i:Number=0;i<8;i++){//八分割円の描画
mc.curveTo(0.9*R*Math.cos((2*i+1)*PI/8)*cos_N,0.9*R*Math.sin((2*i+1)*PI/8)*cos_N,0.9*R*Math.cos((i+1)*Math.PI/4),0.9*R*Math.sin((i+1)*Math.PI/4));
}
mc.endFill();
mc._visible=true;
}
public function redraw():Void{//実際に針を描画するヤツ。
if(hands){hands.removeMovieClip()}
var hands:MovieClip=_root.createEmptyMovieClip('hands',200);
hands._x=x_size/2;
hands._y=y_size/2;
var now:Date=new Date();
var h:Number=now.getHours();
var m:Number=now.getMinutes();
var s:Number=now.getSeconds();
var theta:Array=new Array();
h%=12;//12で正規化…というのだろうか
theta[3]=h+m/60+s/3600;//PI/6-つまり文字の間隔-を単位とする
theta[4]=m/5+s/300;
theta[5]=s/5;
for(var i:Number=3;i<6;i++){
hands.lineStyle(7-i,0x000000,100);
hands.moveTo(0,0);
hands.lineTo(i*R*Math.sin(PI*theta[i]/6)/8,-i*R*Math.cos(PI*theta[i]/6)/8);
}
}
static function main():Void{//エントリポイント。Clockのインスタンスを作るだけ。
var c=new Clock();
}
}