1)午前11時を起点として倍の速度で動く
2)24時間経過して再び午前11時になったらリセットされて11時になる。
という仕様です。
秒針とかアニメーションはおいおいつけていくので良いとして、
計算式をどうしたものかと悩んでいます。
通常ならば1フレーム目でnew Date();関数を使って
現在の時間を取得する繰り返しで時計を作れるかと思うのですが、
1分を30秒にする、1時間を30分にする、というような
時間を倍にしてカウントアップしていく計算式はどうしたものでしょうか。
計算にめっぽう弱いのでご助言お願いいたします。
まず確認ですが、12時間のアナログ時計ですよね。
であれば、たとえば9月24日午前11時にスタートするとすると、以下のような刻み方になります。したがって、とくに午前11時に針の位置をリセットする必要はないですよね。
本当の時刻 | 正しい時計 | 倍速時計 |
---|---|---|
24日午前11時 | 1回転目の11 | 1回転目の11 |
24日午後5時 | 2回転目の5 | 2回転目の11 |
24日午後11時 | 2回転目の11 | 3回転目の11 |
25日午前5時 | 3回転目の5 | 4回転目の11 |
25日午前11時 | 3回転目の11 | 5回転目の11 |
計算式ですが、文字通り、針の動きを倍速で進めればOKです。
たとえば、「Flash時計を作る」の中程に針を進めるためのイベント "onEnterFrame" のコードがありますが、倍速時計では時針、分針、秒針の係数を2倍にしてやれば良いのです。
すなわち
_root.hour_t._rotation = (n_date.getHours() * 30 + n_date.getMinutes() / 2) * 2; _root.minu_t._rotation = n_date.getMinutes() * 6 * 2; _root.sec_t._rotation = n_date.getSeconds() * 6 * 2;
わかりやすいご回答ありがとうございます!
複雑に物事を考えすぎていたようです。
午前11時からカウントアップしていって…という方向で考えていましたが、必要なかったですね。
どうもありがとうございました!助かりました!