時間が倍の速度で表示されるアナログ時計をFlash(AS2)で作りたいと考えています。

1)午前11時を起点として倍の速度で動く
2)24時間経過して再び午前11時になったらリセットされて11時になる。
という仕様です。

秒針とかアニメーションはおいおいつけていくので良いとして、
計算式をどうしたものかと悩んでいます。
通常ならば1フレーム目でnew Date();関数を使って
現在の時間を取得する繰り返しで時計を作れるかと思うのですが、
1分を30秒にする、1時間を30分にする、というような
時間を倍にしてカウントアップしていく計算式はどうしたものでしょうか。
計算にめっぽう弱いのでご助言お願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/09/24 18:21:54
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:pahoo No.1

回答回数5960ベストアンサー獲得回数633

ポイント60pt

まず確認ですが、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;
id:mizi

わかりやすいご回答ありがとうございます!

複雑に物事を考えすぎていたようです。

午前11時からカウントアップしていって…という方向で考えていましたが、必要なかったですね。

どうもありがとうございました!助かりました!

2008/09/24 18:21:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません