遅刻しない時計
時間にルーズな人が、遅刻しないために、時計の時間をわざと10分早い時計を
つかっていたりする。この場合、全体の時間がずれてしまうので、
今回作る時計は、目的の時間の手前から、時間が少しずつ早くなる時計を考えた。
下のテキストボックスで、時間入力して、
setボタンを押すと、目的時間が設定できます。
■まずは、普通のデジタル時計の作り方
1.新規作成した、Flashのステージに
テキストツールを選択して、ステージにテキストボックスを作成。
2.テキストボックスのプロパティを、「ダイナミックテキスト」、名前をaに指定
var dateObj:Date = new Date(); a.text = ((dateObj.getHours())+":"+dateObj.getMinutes()+":"+dateObj.getSeconds());
1行目:new Date();でDateオブジェクトを生成。
2行目:
dateObj.getHours()─時間を取得
dateObj.getMinutes()─分を取得
dateObj.getSeconds()─秒を取得
+演算子で文字を連結して、テキストフィールドプロパティtextに代入して、時間を表示
4.パブリッシュすると、時間が表示される。
が、時計は止まったままで、時間は更新されない。
5.時間を更新させるために、スクリプト以外のフレームを1つ追加して、
スクリプトが1フレーム目に入るごとに、処理を走らせます。
フレームの追加方法は、テキストボックスのあるタイムラインを選択して、
挿入→タイムライン→フレームを選択。
6.選択すると、タイムラインが伸び、

1フレーム目にあるスクリプトがループにより更新される。
パブリッシュすると時間が更新されるのがわかる。
■時計を改造
実装する前に決めたことは、以下の3点
・1秒を0.8秒にすることで、時間を縮める。
・10分早くするために、50分前から時間を縮める処理をする。
・1秒より細かな時間が必要なので、getMilliseconds()関数で、ミリ秒を利用する。
// [定義]
// 目的時間
var targetTime;
// 目的時間を、秒単位で換算
function timerSet(){
targetTime = Number(t_h.text) * 60 * 60 + Number(t_m.text) * 60 + Number(t_s.text);
}
// [初期処理]
// 目的時間を設定
timerSet();
// [フレームのループ処理]
onEnterFrame = function(){
var dateObj:Date = new Date();
// 今の時間を、秒単位に換算
var nowTime = dateObj.getHours() * 60 * 60 + dateObj.getMinutes() * 60 + dateObj.getSeconds();
// まだ目標の時間は来ていなくて、目標の時間の3000秒(50分)以内のとき
// 時間を縮める処理をする
if((nowTime < targetTime) && ((targetTime - nowTime) < 50 * 60)){
// 50分前の時間
var startTime = targetTime - 50 * 60;
// ミリ秒単位で、今と50分前の時間の差分を計算
var dis = (nowTime - startTime) * 1000 + dateObj.getMilliseconds();
// 調整後の時間
var controlTime = Math.floor(dis * (6 /5) / 1000 ) + startTime;
// 時間
var h = Math.floor( controlTime / (60 * 60) );
// 分
var m = Math.floor((controlTime - h * 60 *60) / 60);
// 秒
var s = controlTime - h * 60 *60 - m * 60;
// テキストボックスに入力
a.text = h + ":" + m + "." + s;
}
// 通常の時間
else{
a.text = ((dateObj.getHours())+":"+dateObj.getMinutes()+"."+ dateObj.getSeconds());
}
}
ソースが長くなりましたが、時間のあるときに講義で解説します。