
Scratchではパソコンのシステム日時を読み取るブロックが用意されているので、それを使ってカレンダーや時計をプログラムすることができます。
今回はそれらのブロックを使って「時・分・秒」を読み取ってアナログ時計を作ってみます。
この記事を読んでいただくと、アナログ時計の時針・分針・秒針の動きを表現するスクリプトの作り方が分かります。
スクリプトの作り方
完成した動き
「緑の旗でスタート」すると、パソコンのシステム日時を読み取って、それをスプライトに反映させて動かしています。

完成したスクリプト
完成したスクリプトの全体です。
スプライトは「文字盤」「時針」「分針」「秒針」の合計4個です。
【スプライト】
文字盤 時針 分針 秒針
【文字盤のスクリプト】

【時針のスクリプト】
「現在の時間」と「現在の分」から時針の角度を計算します。

【分針のスクリプト】
「現在の分」から分針の角度を計算します。

【秒針のスクリプト】
「現在の秒」から秒針の角度を計算します。

スクリプトの説明
ポイント①:秒針の角度を計算する
時計の秒針は、60秒で1回(360度)回転します。つまり、1秒間で6度回っている計算になります。
そうすると例えば、現在○○時○○分25秒だとすると$$25秒×6度=150度$$になります。
これをスクリプトに置きかえると「(現在の秒)×6度」になります。

Scratchの角度の指定は真上が0度で時計回りになっています。
Scratchの向きは、真上が0度・真下が180度で時計回りです。ただし、Y軸を中心に右半分が+の範囲、左半分が-の範囲になります。例えば、180度を超えると181度としても計算はできますが、-179度という表記になります。

ポイント②:分針の角度を計算する
時計の分針は、60分で1回(360度)回転します。つまり、1分間で6度回っている計算になります。
そうすると例えば、現在○○時15分だとすると$$15分×6度=90度$$になります。
これをスクリプトに置きかえると「(現在の分)×6度」になります。

この場合、分針が6度ごとにカクカクと回転することになります。秒針の進行に合わせてじわじわと回転させたい場合は秒針の進み具合を加味して以下のようなスクリプトにすることもできます。

ポイント③:時針の角度を計算する
時計の秒針は、12時間で1回(360度)回転します。つまり、1時間で30度回っている計算です。
そうすると例えば、現在8時だとすると$$8時×30度=240度$$になります。
これを単純にスクリプトに置きかえると「(現在の時)×30度」になりますが、これだけだと30度ずつカクカクという回転になってしまい現実的な動きではなくなってしまうので、分針の進み具合に合わせてじわじわと回転させるやり方を考えます。
これは分針が30分進んだら時針を15度(30度の半分)だけ進ませればよいので、例えば現在8時30分だとすると以下の式で計算することができます。
$$8時\times30度+30分\div2=255度$$
これをスクリプトに置きかえると以下のようになります。

ポイント④:スプライトの針の向きは右真横向き(90度)でつくる
Scratchでは、スプライトを作ったときのデフォルト(標準)の向き(角度)は90度(右真横)になっているので時針・分針・秒針のスプライトをつくる時の針の向きは右向きに作るようにしないといけません。
もし違う角度で作ってしまうと実際の角度と針の角度がズレてしまうので、正しい時刻を指し示すことができなくなります。

ここまでのポイントを押さえてスクリプトを作ることができたら、アナログ時計の時針・分針・秒針の動きを表現するプログラムは完成です!
失敗しやすいポイント
ポイント④で書いたように針の向きは右真横(90度)を向けて作らなければ時間がズレてしまうので注意しましょう。
例えば下の図のように秒針を真下(180度)に向けて作ってしまうと時間が30秒ズレた状態で動き続けてしまいます。
これはスプライトを作ったときの初期状態では、必ず90度を向いて作成されるためです。

応用編
今回応用編は特にありません。
まとめ
さいごに、今回の記事で説明した『アナログ時計の時針・分針・秒針の動きを表現するスクリプトの作り方』のポイントをまとめます。
- ポイント①:秒針の角度を計算する
- ポイント②:分針の角度を計算する
- ポイント③:時針の角度を計算する
- ポイント④:スプライトの針の向きは右真横向き(90度)でつくる
このプログラムを単体で使うことはありまりないかもしれませんが、例えば家の中や学校や公園など日常生活の中で実際に時計が掛けられている場所があるので、そのような風景の1つとして活用するとリアリティが増す作品に仕上がるのではないかと思います。
また、別の記事ではアナログ時計でストップウオッチを再現するプログラムについても紹介しています。↓↓↓