今回でやっと時計を動かせるようになるんだよね。 | |
うん。じゃあ早速スクリプトを書いていこっか。 | |
うん! | |
§3.6のスクリプトをベースにしてスクリプトを書いていくね。 | |
は〜い。 | |
まずはコンストラクタからね。 時計を動かすためには、§3.6のスクリプトのコンストラクタをどう書き換えたらいいと思う? |
|
えっと、表示を更新するためにタイマーが必要だから、タイマーオブジェクトを追加すればいいんだよね? | |
ん、そだね。 じゃあ、コンストラクタを書いてみて。 あ、タイマーオブジェクトを作る時には timer っていう名前のメンバ変数を使ってね。 |
|
うん、わかった。 |
これでいいよね? | |
ん、これでいいよ。 じゃあ、次は action メソッドを書いてみて。 |
|
おっけー。 |
<action メソッド>
日時を表示する drawTime メソッドがあるから、これを呼び出せばいいだけだよね? | |
そだね。 じゃあ後は drawTime メソッド。 |
|
え? drawTime メソッドはそのままでいいんじゃないの? | |
ん〜…それじゃとりあえず実行してみよっか。 | |
うん! |
<実行結果>
あれっ!? 表示がおかしくなっちゃったよ!? | |
drawText メソッドはレイヤに文字を書き込むだけで、 元々書いてある文字列を消してくれるわけじゃないから、 drawTime メソッドを実行するたびに文字が上書きされちゃって、こんなふうになるんだ。 | |
それじゃあ、drawText メソッドで文字を書き込む前に、元々書いてある文字を消さなくちゃいけないってこと? | |
うん、そういうこと。 | |
でもどうやったら文字を消せるの? | |
fillRect メソッドって覚えてる? | |
え? え〜っと…レイヤの内部を塗りつぶすメソッド、だったっけ? | |
そう。§3.2 で使ったよね。 このメソッドを使うと、元々書いてある文字を消せるんだ。 |
|
えっ、そうなの? どうやって? | |
レイヤを透明色で塗りつぶすの。 | |
? それってどういうこと? | |
fillRect メソッドの第5引数には、 AARRGGBB 形式で塗りつぶす色を指定するんだったよね。 | |
うん。 例えば 0xFFFF0000 にすると赤色で塗りつぶせるんだよね。 |
|
そうそう。 で、透明色で塗りつぶすっていうのは、第5引数に 0x00000000 を指定するってこと。 |
|
全部ゼロ? | |
注目して欲しいのは、AA の部分がゼロになってるってとこ。 | |
AA って不透明度だったよね? | |
そ。だから、不透明度がゼロってことは、完全に透明ってこと。 | |
あ、もしかして、不透明度ゼロで塗りつぶすとレイヤが透明になるの? | |
ん、そのとーり。 レイヤ全体を不透明度ゼロで塗りつぶせば、元々書いてあった文字は全部消えて、レイヤ全体が透明になるってワケ。 |
|
なるほどねぇ〜。 | |
んじゃ、drawTime メソッドを書き換えてみて。 | |
うん、やってみるね。 |
これでレイヤに書いてある文字を消してから文字を書き込めるよね。 | |
うん。それじゃ改めて実行してみよっか。 | |
うん! |
<実行結果> ※実際にはちゃんと時計として動作します。
やったぁ! ちゃんと動いたよっ! | |
これで時計の部分は完成だね! | |
やっとここまで来れた〜って感じだね。 | |
確かに、時計を作るって目標を立ててからもう結構経つよね。 | |
だよね〜。 | |
それじゃ、今回はここまでだね。 今回のスクリプトはちょっと長いから、ファイルにしとくね。 次回はサウンドの再生をやるよ。 |
|
それってアラームを鳴らすのに使うの? | |
ん、そだよ。 それじゃ、また次回ね! |