- ベストアンサー
Flashのアナログ時計、針の精度を高めたい
質問失礼します。 僕は、インターネットで調べながらFlashでのアナログ時計を作ったのですが、針が1秒ずつ「カチッ、カチッ」としか動かないのです。(抽象的ですがお許しください) それで、インスタンス名「jikan」に、時間の変数 hour と 分の変数 min を使って以下のように書きました。 jikan = hour * 30 + min / 2; ここまではよかったのですが、これ以上回転角度を細かく(スムーズに)することは不可能でしょうか。 できれば、そのための式を出していただけると非常に助かります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> 針が1秒ずつ「カチッ、カチッ」としか動かないのです。 フレームレートの問題でしょうかね。 そこまで細かい秒針の動きまで気にする人(見る側の人)はいないので, 普通はあまりこだわりませんが,ある程度であればフレームレートで対処できると思います。 Flash では,ドキュメントのフレームレート設定が 12fps になっています。 これは 1秒間に進むフレーム(表示を切り替えるタイミング)が,約 12分の1秒 ということです。 12分の1秒 に1回しか表示を切り替えないので, その間で秒が進んだとき,次のフレーム表示まで表示は切り替わりません。 12fps だと,常に 12分の1秒 の半分くらいの誤差が出ます。 たとえば 24fps にすると,誤差は 24分の1秒 の半分くらいに小さくなります。 50fps や 100fps などまでには普通はしないので, 限度がありますが,少しフレームレートの数値を高められてはいかがでしょうか? ////////////////////////////////////////////////////////////// > jikan = hour * 30 + min / 2; > ここまではよかったのですが、これ以上回転角度を細かく > (スムーズに)することは不可能でしょうか。 これは上の質問と全く別問題ですよね。 上のご質問は正確に カチッ カチッ と進ませる方法で, この質問はそれとは別の角度の問題だと思います。 とりあえず, 質問の現状までのASを補完すると次のようになっているかと思います。 _root.onEnterFrame = function() { H = new Date(); hour = H.getHours(); min = H.getMinutes(); jikan = hour * 30 + min / 2; }; この, jikan = hour * 30 + min / 2; は, jikan = (hour*360/12)+(min*360/12/60); を簡略したものですよね。 もっとなめらかにするには,秒の値まで足せば良いということになります。 _root.onEnterFrame = function() { H = new Date(); hour = H.getHours(); min = H.getMinutes(); sec = H.getSeconds(); //jikan = (hour*360/12)+(min*360/12/60)+(sec*360/12/60/60); // ↓計算↓ jikan = hour*30+min/2+sec/120; }; たぶんこれで行けていると思いますが。 もっと細かくするなら,ミリ秒単位も加算すればできます。
お礼
回答ありがとうございます。 大変参考になりました。 分、秒、ミリ秒単位での角度を加算することでスムーズにできるのですね。 無事に時計の製作ができましたので、お礼とともにお知らせいたします。 ありがとうございました。